GROUP BY 확장 기능 정리: ROLLUP, CUBE, GROUPING SETS

박우진·2025년 5월 23일

SQLD

목록 보기
10/12

SQL에서 집계 분석을 더욱 유연하게 하기 위해 GROUP BY 확장 기능ROLLUP, CUBE, GROUPING SETS가 제공됩니다. 이 글에서는 각 기능의 개념, 문법, 예제, 차이점을 정리합니다.


1. ROLLUP

개념

ROLLUP은 그룹별 **계층적 합계(소계, 총계)**를 계산합니다.

  • 왼쪽 → 오른쪽으로 그룹핑 계층을 따라가며 소계/총계를 자동 생성합니다.

문법

SELECT column1, column2, AGG_FUNC(...)
FROM table
GROUP BY ROLLUP(column1, column2);

예제

SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);
DEPTNOJOBSUM(SAL)
10CLERK1300
10MANAGER2450
10NULL3750 ← 부서 10의 소계
20ANALYST6000
20NULL6000
NULLNULL9750 ← 전체 총계

2. CUBE

개념

CUBE는 모든 조합의 그룹별 합계를 계산합니다.

  • 가능한 모든 차원의 조합에 대해 집계를 수행합니다.
  • ROLLUP보다 더 많은 결과를 생성합니다.

문법

SELECT column1, column2, AGG_FUNC(...)
FROM table
GROUP BY CUBE(column1, column2);

예제

SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB);
DEPTNOJOBSUM(SAL)
10CLERK1300
10MANAGER2450
10NULL3750
NULLCLERK1300
NULLMANAGER2450
NULLNULL9750

→ DEPTNO만 그룹, JOB만 그룹, 둘 다 없는 총계까지 포함됨


3. GROUPING SETS

개념

GROUPING SETS여러 개의 GROUP BY 쿼리를 하나로 결합한 것처럼 작동합니다.

  • 각 집계 단위를 명시적으로 지정 가능
  • ROLLUP보다 유연성 높음

문법

SELECT column1, column2, AGG_FUNC(...)
FROM table
GROUP BY GROUPING SETS (
    (column1, column2),
    (column1),
    ()
);

예제

SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY GROUPING SETS (
    (DEPTNO, JOB),
    (DEPTNO),
    ()
);
DEPTNOJOBSUM(SAL)
10CLERK1300
10MANAGER2450
10NULL3750
NULLNULL9750

→ 원하는 그룹핑 조합만 선택적으로 지정 가능


GROUPING 함수

GROUPING(col)
: 해당 컬럼이 집계에서 **NULL로 바뀐 행(소계/총계)**인지 확인

  • 0 → 실제 값
  • 1 → NULL (총계/소계)

예:

SELECT DEPTNO, JOB,
       GROUPING(DEPTNO) AS G1,
       GROUPING(JOB) AS G2,
       SUM(SAL)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB);

요약 비교

기능소계 생성 방식조합 수유연성예시
ROLLUP좌→우 순서대로 누적 소계적음중간(A, B) → (A, B), (A), ()
CUBE모든 조합많음낮음(A, B) → (A, B), (A), (B), ()
GROUPING SETS지정된 조합만 집계유저가 정의함높음((A, B), (A), ()) 등 자유 조합 지정 가능

마무리

  • ROLLUP → 계층적 소계와 총계를 원할 때
  • CUBE → 가능한 모든 그룹 조합을 보고 싶을 때
  • GROUPING SETS → 특정한 집계 조합만 지정하고 싶을 때

0개의 댓글