SQLD 시험 대비

SQLD 고급 그룹함수

_김영인 2026. 2. 27. 23:02

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. (컬럼1, 컬럼2) 그룹
  2. (컬럼1) 소계
  3. 전체 총계

 

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