본문으로 바로가기

[Oracle]그룹핑시 행 겹치기(LISTAGG)

category DB\SQL 2019. 2. 28. 19:30

조회를할떄 GROUP BY 를 사용하여 그룹핑을 할때가 많습니다.


이때 값이달라 그룹지어지지 않은 행의 데이터를 한줄에 모아서 보여주고 싶을때 LISTAGG함수를 사용 할 수 있습니다.


LISTAGG는 오라클11g부터 생겼습니다.




LISTAGG


단골 테스트 테이블인 COUNTRIES 테이블입니다.


REGION_ID와 COUNTRY_NAME을 그룹지어 조회해 보겠습니다.


SELECT REGION_ID,COUNTRY_NAME FROM COUNTRIES
GROUP BY REGION_ID,COUNTRY_NAME
ORDER BY REGION_ID
cs


REGION_ID가 일치하는것이 많지만 COUNTRY_NAME 값이 달라 그룹으로 묶이지않습니다.


이때, REGION_ID를 그룹핑하고 COUNTRY_NAME을 한줄에 몰아세우고싶을때, LISTAGG를 사용 할 수 있습니다.



LISTAGG (하나로합칠 컬럼, '컬럼값 사이 구분문자') WITHIN GROUP(ORDER BY 정렬컬럼)



SELECT REGION_ID,LISTAGG(COUNTRY_NAME,',') WITHIN GROUP(ORDER BY COUNTRY_NAME) FROM COUNTRIES
GROUP BY REGION_ID
ORDER BY REGION_ID
cs

그룹되지 않던 COUNTRY_NAME를 한줄에 모아 조회하였습니다.