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 해서 사용할 수 있다.