[Oracle] Group By Comma Separated. 그룹 쉼표로 구분하여 컬럼 하나로 표시하는 방법

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을 오름차순으로 콤마로 연결한 문자열을 출력할 수 있습니다.

댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗