-
[문자열 연결 function] MySQL의 group_concat과 oracle의 LISTAGG 사용 방법DataBase/MariaDB & MySQL 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
123select group_concat(business_area SEPARATOR ',')from demo_tablewhere comp_name = 'zorba';cs SEPARATOR는 구분자를 지정하는 것이다. SEPARATOR '-'로 설정한다면,
food-hotel-car로 결과가 나올 것이다.(구분자를 정해주지 않고 group_concat(business_area)로 한다면 디폴트로 ','가 붙어서 나열된다.)
컬럼을 order by 해서 사용하고 싶다면 아래 처럼 group_concat 안에서 컬럼 옆에 사용하면 된다.
123select group_concat(business_area ORDER BY business_area DESC SEPARATOR ',')from demo_tablewhere comp_name = 'zorba';cs 2) Oracle
123select LISTAGG(business_area, ',') WITHIN GROUP(ORDER BY business_area)from t_co_comp_multiwhere comp_name = 'zorba';cs function 이름만 다르고 사용법은 유사하다. separator라는 글자 필요 없이 바로 붙일 컬럼의 구분자를 지정해주면 된다.
그리고 within group(order by)이 항상 따라와야 사용이 가능하다.
MYSQL과 마찬가지로 컬럼을 order by 해서 사용할 수 있다.
'DataBase > MariaDB & MySQL' 카테고리의 다른 글
[MySQL] 인덱스(Index) 정리 (1) 2020.02.09 [MySQL] Mysql에서 프로시저(procedure) 안에 사용된 문자열 검색하기 (0) 2019.01.15 [MariaDB/MySQL]데이터 insert하면서 중복되면 update하는 기능 (0) 2018.05.05 [iBatis+Spring+mariaDB] AUTO_INCREMENT의 초기화와 transaction에 관하여 (0) 2018.05.03 Transaction과 MySQL의 MyISAM 엔진(JUnit 테스트 중에 깨달은 사실) (0) 2018.04.17