BACKEND.*
Oracle LISTAGG 함수 사용법
초코푸딩
2022. 1. 5. 23:56
LISTAGG( 합칠컬럼명, 구분자) WITHIN GROUP (ORDER BY 정렬컬럼명)
여러 행의 컬럼값을 하나로 합치기 위해서 사용한다.
WM_CONCAT 함수와 함께 쓰이던 DISTINCT 를 LISTAGG와 사용할 수 없어서
정규식 함수를 사용하여 중복을 제거하고
ORDER BY를 통해 값의 정렬을 한다.
컬럼합치기
SELECT LISTAGG( EMP_NM, ',') WITHIN GROUP (ORDER BY EMP_NM) AS empNm
FROM TB_EMP
WHERE JOB IN ('MANAGER', 'SALESMAN')
PARTITION BY절을 사용하여 컬럼 합치기
-조회된 행을 그대로 유지하면서 합쳐진 컬럼의 값을 표시할 수 있다.
SELECT EMP_NM
, JOB
, LISTAGG( EMP_NM , ',' ) WITHIN GROUP (ORDER BY EMP_NM) OVER (PARTITION BY JOB) AS empNm
FROM TB_EMP
WHERE JOB IN ('MANAGER', 'SALESMAN')
중복을 제거하여 컬럼 합치기
SELECT JOB
, REGEXP_REPLACE(LISTAGG(DEPT_NO, ',') WITHIN GROUP(ORDER BY DPT_NO), '([^,]+)(,\1)*(,|$)', '\1\3') AS deptNoArr
FROM TB_EMP
WHERE JOB IN ('MANAGER', 'SALESMAN')
GROUP BY JOB