본문 바로가기
[개발] Programming/Database

오라클 LISTAGG, 여러 행을 하나의 컬럼으로 합치기

by eatyourKimchi 2019. 9. 25.

 

Oracle LISTAGG()

 

LISTAGG()은 오라클 11g부터 지원하는 내장 함수입니다.

컬럼(아래)으로 나열되는 데이터를 로우(가로)로 나열하고 싶은 경우에 사용합니다.

즉, 리스트 형태로 나오던 데이터를 그루핑 할 때 유용합니다.

그럼 구체적으로 사용 방법을 알아보겠습니다.

 

 

 

기본 형태

 

기본적으로 LISTAGG 인자는 합칠 컬럼명과 구분자입니다. 

구분자는 단순히 구분하기 위한 목적으로 아무 문자나 사용해도 됩니다.

 

1
2
3
SELECT LISTAGG(대상컬럼, 구분자) WITHIN GROUP (ORDER BY 정렬기준컬럼)
FROM 테이블
;
cs

 

SELECT 절에 LISTAGG 외에 컬럼을 표시하면 합칠 때 기준이 됩니다.

만약 LISTAGG만 사용한다면 모든 이름이 하나의 컬럼으로 표시됩니다.

 

 

 

예시 데이터

 

테이블 명: MEMBER_INFO

 

 

 

 

함수 사용법 예시1

 

모든 멤버를 하나의 컬럼으로 표시하기

 

1
2
3
SELECT LISTAGG(MEMBER_NAME, ',') WITHIN GROUP (ORDER BY MEMBER_LEVEL) AS MEMBER_LIST
FROM MEMBER_INFO
;
cs

 

 

 

 

함수 사용법 예시2

 

같은 멤버십 등급끼리 하나의 컬럼으로 표시하기

 

1
2
3
4
SELECT MEMBER_LEVEL
     , LISTAGG(MEMBER_NAME, ',') WITHIN GROUP (ORDER BY MEMBER_LEVEL) AS MEMBER_LIST
FROM MEMBER_INFO
;
cs

 

 

 

 

함수 사용법 예시3

 

같은 나이대 별로 하나의 컬럼으로 표시하기

 

1
2
3
4
SELECT AGE_TYPE
     , LISTAGG(MEMBER_NAME, ',') WITHIN GROUP (ORDER BY MEMBER_LEVEL) AS MEMBER_LIST
FROM MEMBER_INFO
;
cs

 

 

 

 

* 만약 오라클 11g 이전 버전을 사용하신다면 WM_CONCAT 함수를 사용하시면 됩니다.

 

댓글