ROLLUP, CUBE, GROUPING SETS, GROUPING
1. GROUP BY 심화 개념 (기본 복습)
기본적인 GROUP BY는 특정 컬럼 기준으로 데이터를 집계할 때 사용한다.
SELECT 컬럼, COUNT(*)
FROM 테이블
GROUP BY 컬럼;
하지만 실무나 시험 (SQLD, 정보처리)에서는 단순 집계가 아니라 아래 같은 요구가 자주 나온다.
- 부서별 + 전체 합계
- 연도별 + 부서별 + 총합
- 여러 기준을 한 번에 집계
- 소계/총계 표시
이걸 해결하는 것이 고급 그룹 함수 4종 세트이다.
- ROLLUP
- CUBE
- GROUPING SETS
- GROUPING 함수
2. ROLLUP (소계 + 총계 자동 생성)
1) ROLLUP 개념
ROLLUP은 계층적 소계와 총계를 자동으로 만들어주는 함수이다.
그룹별 소계 → 전체 총계를 한 번에 계산한다.
GROUP BY ROLLUP(컬럼1, 컬럼2)
동작 순서:
- (컬럼1, 컬럼2) 그룹
- (컬럼1) 소계
- 전체 총계
2) ROLLUP 예제
예시: 자동차 테이블 (CYL = 실린더, GEAR = 기어)
SELECT CYL, COUNT(*)
FROM MTCARS
GROUP BY ROLLUP(CYL)
ORDER BY CYL;
실행 결과 개념:
| CYL | COUNT |
| 4 | 11 |
| 6 | 7 |
| 8 | 14 |
| NULL | 32 (전체 총계) |
핵심 특징:
- NULL 행 = 총계
- 마지막에 전체 합계 자동 생성
3) 다중 컬럼 ROLLUP
SELECT CYL, GEAR, COUNT(*)
FROM MTCARS
GROUP BY ROLLUP(CYL, GEAR)
ORDER BY CYL, GEAR;
생성되는 집계 단계:
- CYL + GEAR 상세
- CYL별 소계
- 전체 총계
(4, 3)
(4, 4)
(4, NULL) ← CYL 소계
(NULL, NULL) ← 전체 총계
3. CUBE (모든 조합 집계)
1)CUBE 개념
CUBE는 가능한 모든 조합의 집계를 생성하는 함수이다.
ROLLUP보다 더 많은 결과가 나온다.
GROUP BY CUBE(컬럼1, 컬럼2)
생성되는 집계:
- (컬럼1, 컬럼2)
- (컬럼1)
- (컬럼2)
- (전체 총계)
2) CUBE 예제
SELECT CYL, GEAR, COUNT(*)
FROM MTCARS
GROUP BY CUBE(CYL, GEAR)
ORDER BY CYL, GEAR;
결과 구조:
- 실린더 + 기어 상세 집계
- 실린더별 소계
- 기어별 소계
- 전체 총계
비교:
| 기능 | 생성 집계 |
| ROLLUP | 계층형 소계 |
| CUBE | 모든 경우의 수 |
4. GROUPING SETS (원하는 집계만 선택)
1) GROUPING SETS 개념
ROLLUP/CUBE는 자동 생성이라 결과가 많아진다.
GROUPING SETS는 필요한 집계만 직접 지정할 때 사용한다.
GROUP BY GROUPING SETS ( (컬럼1), (컬럼2) )
2) GROUPING SETS 예제
SELECT CYL, GEAR, COUNT(*)
FROM MTCARS
GROUP BY GROUPING SETS ( (CYL), (GEAR) )
ORDER BY CYL, GEAR;
의미:
- CYL 기준 집계만 생성
- GEAR 기준 집계만 생성
- 불필요한 조합 제거 가능
실무에서 많이 쓰이는 이유:
- 성능 최적화
- 필요한 집계만 출력 가능
5. GROUPING 함수 (소계 / 총계 구분)
1) GROUPING 함수 개념
ROLLUP이나 CUBE를 사용하면 NULL 값이 실제 데이터인지 소계인지 구분이 안 된다.
이 문제를 해결하는 함수가 GROUPING이다.
GROUPING(컬럼)
반환값:
- 0 → 실제 데이터
- 1 → 소계 / 총계 행
2) GROUPING + CASE 활용 (시험 핵심)
SELECT
CASE GROUPING(CYL)
WHEN 1 THEN '총계'
ELSE TO_CHAR(CYL)
END AS CYL,
COUNT(*) AS CNT
FROM MTCARS
GROUP BY ROLLUP(CYL)
ORDER BY CYL;
효과:
- NULL 대신 "총계" 표시 가능
- 보고서용 SQL에서 필수 기술
6. 실전 문제 유형 (시험 단골)
문제 구조 핵심: 사원 테이블 / 부서명 + 입사연도 집계 / 소계 표시 요구
SELECT 부서명, 입사연도, COUNT(*) AS 입사자
FROM 사원
GROUP BY ROLLUP(부서명, 입사연도);
해석:
- 부서별 + 연도별 집계
- 부서 소계
- 전체 소계
7. ROLLUP vs CUBE vs GROUPING SETS 정리 (시험 100% 출제)
| 구분 | 특징 | 생성 집계 |
| ROLLUP | 계층적 소계 | 순차 소계 + 총계 |
| CUBE | 모든 조합 | 모든 경우의 수 |
| GROUPING SETS | 선택 집계 | 지정한 집계만 |
| GROUPING | 소계 판별 | 0 또는 1 반환 |
8. 실무 관점 핵심 (개발자 기준)
Spring + MySQL/Oracle 프로젝트 기준으로 아래 상황에서 필수이다.
1) 관리자 통계 페이지
- 연도별 가입자 수
- 카테고리별 게시글 수
- 월별 매출 통계
2) 대시보드 집계
GROUP BY ROLLUP(연도, 월)
→ 연도 합계 + 전체 합계 자동 생성
3) BI / 데이터 분석
- CUBE는 데이터 분석 시스템에서 매우 많이 사용된다.
9. 시험 대비 암기 포인트 (초압축)
시험에서 가장 많이 나오는 것:
- ROLLUP = 소계 + 총계
- CUBE = 모든 조합 집계
- GROUPING SETS = 필요한 집계만 선택
- GROUPING() = 소계 판별 함수
- NULL 행 = 총계/소계 가능성 높음
SQLD / 정보처리에서 자주 나오는 함정:
- GROUPING 함수 + CASE + ROLLUP 조합 문제
고급 그룹 함수(ROLLUP, CUBE, GROUPING SETS)는 단순 GROUP BY를 확장하여 소계, 총계, 다차원 집계를 효율적으로 수행하는 SQL 분석용 핵심 기능이며 실무에서는 통계 페이지, 대시보드, 데이터 분석 쿼리에서 필수적으로 사용되는 집계 기술이다.
'SQLD 시험 대비' 카테고리의 다른 글
| SQLD Top N 쿼리 (0) | 2026.03.01 |
|---|---|
| SQLD 윈도우 함수 (0) | 2026.02.28 |
| SQLD 집합연산자 (0) | 2026.02.27 |
| SQLD 서브쿼리 (0) | 2026.02.26 |
| SQLD 표준 조인 (0) | 2026.02.25 |