이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다. Java(TM) 플랫폼 : 1.8.0_321 Oracle IDE : 4.1.5.21.78 |
GROUPING(), GROUPING_ID()
설명
GROUPING() : ROLLUP() 또는 CUBE() 함수를 사용한 GROUP BY절에 그룹화 대상으로 지정한 열이 그룹화된 상태로 결과가 집계되었는지 확인하는 데 사용하는 함수. GROUP BY절에 명시된 열 중 하나를 지정할 수 있음
GROUPING_ID() : ROLLUP() 또는 CUBE() 함수를 사용한 GROUP BY절에 그룹화 대상으로 지정한 열이 그룹화된 상태로 결과가 집계되었는지 확인하는 데 사용하는 함수. GROUPING() 함수와 달리 한 번에 여러 열을 지정할 수 있음
문법
GROUPING()
SELECT ...
GROUPING(GROUP BY절에 ROLLUP 또는 CUBE에 명시한 그룹화할 열 이름1),
GROUPING(GROUP BY절에 ROLLUP 또는 CUBE에 명시한 그룹화할 열 이름2),
...
GROUPING(GROUP BY절에 ROLLUP 또는 CUBE에 명시한 그룹화할 열 이름n)
FROM ...
WHERE ...
GROUP BY ROLLUP/CUBE(열1, 열2, ... , 열n)
ORDER BY ...
GROUPING_ID()
SELECT ...
GROUPING_ID(그룹화할 열 이름(여러 개 지정 가능))
FROM ...
WHERE ...
GROUP BY ROLLUP/CUBE(열1, 열2, ... , 열n)
ORDER BY ...
사용 예시
-- query1
SELECT DEPTNO, JOB, COUNT(*), MAX(SAL), SUM(SAL), AVG(SAL),
GROUPING(DEPTNO),
GROUPING(JOB)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB)
ORDER BY DEPTNO, JOB;
-- query2
SELECT DECODE(GROUPING(DEPTNO), 1, 'ALL_DEPT', DEPTNO) AS DEPTNO
, DECODE(GROUPING(JOB), 1, 'ALL_JOB', JOB) AS JOB
, COUNT(*), MAX(SAL), SUM(SAL), AVG(SAL)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB)
ORDER BY DEPTNO, JOB;
-- query3
SELECT DEPTNO, JOB, COUNT(*), SUM(SAL),
GROUPING(DEPTNO),
GROUPING(JOB),
GROUPING_ID(DEPTNO, JOB)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB)
ORDER BY DEPTNO, JOB;
결과
-- query1
SELECT DEPTNO, JOB, COUNT(*), MAX(SAL), SUM(SAL), AVG(SAL),
GROUPING(DEPTNO),
GROUPING(JOB)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB)
ORDER BY DEPTNO, JOB;
-- query2
SELECT DECODE(GROUPING(DEPTNO), 1, 'ALL_DEPT', DEPTNO) AS DEPTNO
, DECODE(GROUPING(JOB), 1, 'ALL_JOB', JOB) AS JOB
, COUNT(*), MAX(SAL), SUM(SAL), AVG(SAL)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB)
ORDER BY DEPTNO, JOB;
-- query3
SELECT DEPTNO, JOB, COUNT(*), SUM(SAL),
GROUPING(DEPTNO),
GROUPING(JOB),
GROUPING_ID(DEPTNO, JOB)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB)
ORDER BY DEPTNO, JOB;
'개발 지식 > [DBMS] Oracle' 카테고리의 다른 글
[Oracle] 데이터 그룹화(6) - PIVOT(), UNPIVOT() (0) | 2022.05.27 |
---|---|
[Oracle] 데이터 그룹화(5) - LISTAGG() (0) | 2022.05.26 |
[Oracle] 데이터 그룹화(3) - GROUPING SETS() (0) | 2022.05.24 |
[Oracle] 데이터 그룹화(2) - ROLLUP(), CUBE() (0) | 2022.05.23 |
[Oracle] 데이터 그룹화(1) - GROUP BY, HAVING (0) | 2022.05.22 |