본문 바로가기
ORACLE/SQL

[Oracle] LISTAGG 컬럼 결과 나열하기 :: 마이자몽

by 마이자몽 🌻♚ 2020. 4. 2.
1
2
3
4
5
SELECT
    DEPTNO
    ,ENAME
FROM EMP
ORDER BY DEPTNO;

ORACLE SCOTT계정의 EMP테이블의 내용입니다.

RDB에 익숙해지면 위와같은 결과가 눈에 잘 들어옵니다. 하지만, 일반 문서에서는 각 부서별로 어떤 사람들이 있는지 ','를 구분자로 데이터를 보는게 이해하기 편할 것 입니다.

 

 

LISTAGG 함수

1
2
3
4
5
SELECT
    DEPTNO
    ,LISTAGG(ENAME, ',') WITHIN GROUP(ORDER BY ENAME) AS EMPS
FROM EMP
GROUP BY DEPTNO;
 

LISTAGG함수를 사용하면 가로로 나열할 수 있습니다. GROUP BY한 결과에 대해서 GROUP안의 칼럼을 나열시킬 수 있습니다.

 

 

MULTI INDEX 확인

LISTAGG함수는 어느때에 사용이 될까요? 문서작성이 필요할때 사요될수도 있고, DB내에서는 MULTI INDEX에서 어떤 컬럼이 사용되고 있는지 보기 쉽게 출력할 수 있습니다.

 

 

1
2
CREATE INDEX EMP_MULTI_IDX
ON EMP (DEPTNO, JOB, MGR);

DEPTNO, JOB, MGR을 묶어 하나의 INDEX로 만들어 줬습니다.

 

 

1
2
3
4
5
6
SELECT
    INDEX_NAME
    ,COLUMN_NAME
    ,COLUMN_POSITION
FROM USER_INDEXES NATURAL JOIN USER_IND_COLUMNS
WHERE TABLE_NAME = 'EMP';

생성한 INDEX를 확인해보니 MULTI COLUMN INDEX의 경우 각각 다른 행으로 데이터 출력됩니다. 좀 더 편하게 확인하기 위해 LISTAGG 함수를 사용해서 가로로 나열할 수 있습니다.

 

 

 

1
2
3
4
5
6
7
8
SELECT
    INDEX_NAME
    ,LISTAGG(
        INDEX_NAME || ':' || COLUMN_POSITION, ','
    ) WITHIN GROUP(ORDER BY INDEX_NAME) AS IDXS
FROM USER_INDEXES NATURAL JOIN USER_IND_COLUMNS
WHERE TABLE_NAME = 'EMP'
GROUP BY INDEX_NAME;

 

태그

댓글0