Group By Comma Separated 방법을 찾고 계신가요? LISTAGG 함수를 통해 그룹 이후 컬럼을 콤마로 합쳐보겠습니다.
SELECT JOB, COUNT (*)
FROM EMP
GROUP BY JOB;
JOB COUNT(*)
------------------ ----------
CLERK 4
SALESMAN 4
PRESIDENT 1
MANAGER 3
ANALYST 2
위와 같이 EMP테이블을 JOB으로 그룹을 하면 각 JOB별 건수를 확인할 수 있습니다. 이때, 그룹에 속한 직원 이름을 콤마로 구분해 보고 싶어요! 어떻게 해야 할까요?
SELECT JOB, ENAME
FROM EMP
GROUP BY JOB;
SELECT JOB, ENAME
ERROR at line 1:
ORA-00979: not a GROUP BY expression
이렇게 바로 그룹이 아닌 컬럼을 조회하면 오류가 발생할 것입니다.
SELECT JOB, LISTAGG (ENAME, ',') WITHIN GROUP (ORDER BY ENAME) AS ENAMES
FROM EMP
GROUP BY JOB;
JOB ENAMES
--------- ------------------------
ANALYST FORD,SCOTT
CLERK ADAMS,JAMES,MILLER,SMITH
MANAGER BLAKE,CLARK,JONES
PRESIDENT KING
SALESMAN ALLEN,MARTIN,TURNER,WARD
위와 같이 LISTAGG 함수를 사용할 수 있습니다. 오라클 버전에 따라 다른 대체 함수, 사용자 정의 함수 등을 사용하여도 가능합니다! 😉
LISTAGG 함수는 WITHIN GROUP절에서 설정한 정렬 순서에 따라 컬럼을 집계하는 역할을 합니다. LISTAGG (ENAME, ',') WITHIN GROUP (ORDER BY ENAME) 과 같이 사용하였으니, ENAME을 오름차순으로 콤마로 연결한 문자열을 출력할 수 있습니다.