그룹 함수 한눈에 보기
그룹 함수는 여러 단위의 소계와 합계를 한 쿼리로 구하는 GROUP BY 확장 기능입니다. 매출 보고서에서 '부서+직무별 / 부서별 / 전체 합계'를 SELECT 세 번으로 나눠 구하지 않고 한 번에 뽑습니다. ROLLUP, CUBE, GROUPING SETS 세 가지가 있고, 모두 GROUP BY 절 안에서만 씁니다.
만들어지는 그룹 조합 수는 열이 n개일 때 ROLLUP은 n+1개, CUBE는 2ⁿ개입니다. GROUPING SETS는 직접 나열한 조합만 만듭니다. 소계·합계 행에서는 집계에서 빠진 열이 NULL로 표시됩니다.
- ROLLUP계층적 소계
(A, B) → (A) → () — n+1단계. 오른쪽 열부터 하나씩 빼며 소계
- CUBE모든 조합
(A, B) → (A) → (B) → () — 2ⁿ단계. 큐브의 모든 면
- SETSGROUPING SETS
지정한 조합만 — 가장 유연. 예:
GROUPING SETS(A, B)는 (A)와 (B)만, 전체 합계 ()는 직접 써야 생김
| GROUP BY 뒤 | 그룹 조합 | 개수 |
|---|---|---|
A, B (기본) | (A, B) | 1 |
ROLLUP(A, B) | (A, B), (A), () | 3 (n+1) |
CUBE(A, B) | (A, B), (A), (B), () | 4 (2ⁿ) |
GROUPING SETS(A, B) | (A), (B) | 2 (나열한 것만) |
이 단원의 예시는 사원 3명의 급여입니다. 결과 행 수를 비교하면 기본 GROUP BY 3행 → ROLLUP 6행 → CUBE 8행이고, GROUPING SETS((DEPT_ID), (JOB), ())는 5행입니다.
| DEPT_ | JOB | SAL |
|---|---|---|
| D1 | MGR | 5000 |
| D1 | CLERK | 2000 |
| D2 | MGR | 4500 |