DataBase/MariaDB & MySQL

[문자열 연결 function] MySQL의 group_concat과 oracle의 LISTAGG 사용 방법

희랍인 조르바 2018. 10. 22. 17:49


컬럼의 데이터들을 연결해서 보여주고 싶을 때가 있다.


예를 들면, 우리 회사의 사업 분야를 row 한 개에 보고 싶다!


 comp_name

 business_area

 zorba

 food 

 zorba

 hotel 

 zorba

 car 


zorba 회사의 사업 분야를 한 줄에 보게 되면 결과는 이렇게 만들 수 있다.


 comp_name 

 total_business_area

 zorba

 food, hotel, car


이런 걸 가능하게 해주는 function이 mysql의 group_concat과 oracle의 listagg이다.


위의 예시를 이용해 사용법을 설명해보겠다.


1) MYSQL


1
2
3
select group_concat(business_area SEPARATOR ','
  from demo_table
 where comp_name = 'zorba';
cs

 

SEPARATOR는 구분자를 지정하는 것이다. SEPARATOR '-'로 설정한다면, 


food-hotel-car로 결과가 나올 것이다.(구분자를 정해주지 않고 group_concat(business_area)로 한다면 디폴트로 ','가 붙어서 나열된다.)


컬럼을 order by 해서 사용하고 싶다면 아래 처럼 group_concat 안에서 컬럼 옆에 사용하면 된다.


1
2
3
select group_concat(business_area ORDER BY business_area DESC SEPARATOR ','
  from demo_table
 where comp_name = 'zorba';
cs




2) Oracle


1
2
3
select LISTAGG(business_area, ',')  WITHIN GROUP(ORDER BY business_area) 
  from t_co_comp_multi
 where comp_name = 'zorba';
cs


function 이름만 다르고 사용법은 유사하다. separator라는 글자 필요 없이 바로 붙일 컬럼의 구분자를 지정해주면 된다.


그리고 within group(order by)이 항상 따라와야 사용이 가능하다.


MYSQL과 마찬가지로 컬럼을 order by 해서 사용할 수 있다.