오라클 SQL에서 LISTAGG 함수를 사용할 때 WITHIN GROUP 절을 함께 사용하는 것을 많이 볼 수 있다. WITHIN GROUP 절은 평소에 많이 사용하지 않기 때문에 다소 생소하게 느껴질 수 있다.
WITHIN GROUP 절은 LISTAGG, RANK, DENSE_RANK 함수와 함께 사용할 수 있다. 그 외에 사용할 수 있는 곳은 아직 찾지는 못했다... 아직 사용할 수 있는 곳이 많지 않기 때문에 아래의 예제만 이해하고 있어도 될 듯하다.
WITHIN GROUP 절은 집계 대상 데이터의 정렬을 지정한다.
WITHIN GROUP ( ORDER BY 컬럼, 컬럼... [ ASC | DESC ] ) |
LISTAGG 함수 예제
LISTAGG 함수를 사용하여 컬럼의 문자열을 합칠 때 WITHIN GROUP 절을 사용하면 정렬이 가능하다.
SELECT LISTAGG(job, ',') WITHIN GROUP(ORDER BY job) AS jobs
FROM emp
WHERE deptno = 20
RANK 함수 예제
RANK 함수에 입력된 값의 순위를 WITHIN GROUP 절의 정렬 기준으로 순위를 알 수 있다.
SELECT RANK(1100) WITHIN GROUP(ORDER BY sal) AS sal_rank
FROM emp
WHERE deptno = 20