ROLLUP, GROUPING SETS, CUBE
1. ROLLUP
- GROUP BY된 칼럼에 대해 소계를 만들어 준다. (컬럼별 집계 + 전체 집계, 즉 컬럼 N개면 N+1개 결과)
- 칼럼 순서에 따라 결과가 다르게 나온다(순서 중요)
- 하나의 칼럼을 기준으로 GROUP BY 된 경우 : 해당 컬럼을 기준으로 집계 + 전체 집계
- 두 개 이상의 칼럼을 기준으로 GROUP BY된 경우 : 각 컬럼을 기준으로 집계 + 전체 집계
예시1) 하나의 칼럼을 기준으로 GROUP BY된 경우
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO);
예시2) 두개의 칼럼을 기준으로 GROUP BY된 경우
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);
예시3) 두 컬럼을 하나의 집합으로 묶은 경우
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, (JOB,MGR));
2. CUBE
- CUBE 함수에 명시된 컬럼에 대해 결합 가능한 모든 집계를 계산(컬럼 N개면 결과 2^N개)
- GROUP BY된 컬럼이 가질 수 있는 모든 경우의 수에 대한 소계를 생성한다.
3. GROUPING SETS
- 칼럼 순서와 무관하게 결과가 나온다(순서 무관)
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY GROUPING SETS(DEPTNO, JOB); // DEPTNO, JOB 별 합계를 각각 조회한다.
// DEPTNO와 JOB의 순서가 바뀌어도 결과는 같다.
[TIP]
ROLLUP, CUBE, GROUPING SETS 결과 비교
SELECT DNAME,JOB, COUNT(*), SUM(SAL)
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY _______(DNAME,JOB);
- ROLLUP
- CUBE
- GROUPING SETS
GROUPING 함수
- ROLLUP, CUBE, GROUPING SETS에서 생성되는 합계 값을 구분하기 위해 사용
- ROLLUP, CUBE에 의해 소계가 계산된 결과에는 GROUPING(EXPR) = 1 이 표시된다.
- 그 외의 결과에는 GROUPING(EXPR) = 0 이 표시된다.