Oracle

오라클 LISTAGG 간단 설명 및 예제

뽀우맨 2024. 2. 15. 17:51

 

그룹핑 하여 행단위로 모아, 콤마로 구분하여 볼 수 있는 방법이 2가지 있다.

 

예전 WM_CONCAT 함수는 간단하게 사용할 수 있지만 정렬순서가 자기 마음대로 였다. 

아래의 예를 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT WM_CONCAT(A.NAME) AS NAMES
FROM
(
    SELECT 101 AS KEY'A1' AS NAME FROM DUAL
    UNION 
    SELECT 101'B2' FROM DUAL
    UNION 
    SELECT 101'C3' FROM DUAL 
    UNION 
    SELECT 102'D4' FROM DUAL 
    UNION 
    SELECT 102'E5' FROM DUAL  
) A
GROUP BY A.KEY
cs

- 쿼리를 실행하면 다음과 같다.

 

 

11G 이상부터 사용할 수 있는 LISTAGG 함수는 Order Delimeter를 지정 할 수 있어서 좀 더 자유롭게 사용 할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT LISTAGG(A.NAME, ':') WITHIN GROUP(ORDER BY A.NAME) AS NAMES
FROM
(
    SELECT 101 AS KEY'A1' AS NAME FROM DUAL
    UNION 
    SELECT 101'B2' FROM DUAL
    UNION 
    SELECT 101'C3' FROM DUAL 
    UNION 
    SELECT 102'D4' FROM DUAL 
    UNION 
    SELECT 102'E5' FROM DUAL  
) A
GROUP BY A.KEY  
cs

- 쿼리를 실행하면 다음과 같다.

 

위의 그림처럼 구분자와 정렬이 적용된 결과를 볼 수 있다.

 

LISTAGG를 이용하여, 행단위 그룹핑을 조회해 보자.