본문 바로가기
Programming/SQL

[SQL] 그룹별 문자열 묶기 (group_concat, listag)

by 코딩하는 금융인 2021. 7. 4.

MySQL 그룹별 문자열 묶기

그룹별로 컬럼 데이터(문자열)를 묶어서 보고 싶을 때가 있습니다.

이런 상황이 발생했을 때 MySQL이나 Oracle에서 유용하게 사용할 수 있는 함수를 비교해서 알려드리도록 하겠습니다.


animal name
monkey Lo
monkey Jay
monkey Jayce
elephant pink
elephant Tayo
elephant K

 

위와 같이 그룹(컬럼)에 따라 데이터가 있는 상황에서,

아래와 같이 그룹별로 문자열을 묶어서 출력해야 할 때가 있습니다.

 

animal names
elephant K,pink,Tayo
monkey Jay,Jayce,Lo

 

사용 함수(+정렬)

MySQL : GROUP_CONCAT(column ORDER BY column SEPERATOR 구분자) ~ group by(column)

Oracle : LISTAGG(column, 구분자) within group(order by column)

 

1) MySQL

select animal, group_concat(name SEPARATOR ',') names
from animals group by animal;

여기서 SEPARATOR는 구분자를 지정해주는 것이 Default 값(명시 X)은 ','임.

묶은 컬럼 데이터에 있어서 순서를 지정하고 싶다면,

group_concat(column order by column seperator ~) 이런식으로 사용하면 됨.

 

2) Oracle

select animal, LISTAGG(name, ',')  WITHIN GROUP(ORDER BY name) as 'names' 
from animals group by(animal);

함수는 다르지만, 사용방법은 동일.

따로 SEPERATOR 문자 없이 바로 구분자 지정해주면 됨.

묶은 데이터를 정렬해야 한다면, LISTAGG 뒤에 within group(order by column) 사용.

반응형

댓글