공든탑앱 열기

ROLLUP·CUBE·GROUPING SETS

SQLD (SQL 개발자) · 그룹 함수와 윈도우 함수 · 약 14분

쉽게 말하면

ROLLUP, CUBE, GROUPING SETS는 소계와 합계를 한 번에 뽑아 주는 도구예요. 지점별, 상품별 매출을 낼 때 지점마다 소계와 전체 합계까지 한 표에 붙여 줘요. ROLLUP은 위계대로 소계, CUBE는 가능한 모든 조합, GROUPING SETS는 적은 기준마다 따로 집계해요.

시험용 정의

그룹 함수(ROLLUP, CUBE, GROUPING SETS)는 GROUP BY에서 소계와 합계를 한 번에 만든다. ROLLUP(a, b): (a, b), (a), () 계층 소계. CUBE(a, b): (a, b), (a), (b), () 가능한 모든 조합. GROUPING SETS(a, b): 적은 그룹만 각각(a별, b별) 집계하고 합계는 없다. 소계 행에서 집계에 쓰이지 않은 열은 NULL로 나오고, GROUPING(열)은 그런 행에서 1을 돌려준다.

비유로 이해하기

매장 매출 보고서다. ROLLUP은 '지점-상품별 → 지점별 소계 → 전사 합계' 순서의 보고서, CUBE는 지점별·상품별·지점×상품·전체를 모두 낸 교차 집계표, GROUPING SETS는 '지점별 표 하나, 상품별 표 하나'만 따로 붙인 것이다.

자세히

먼저 알아 둘 말

말뜻
소계중간 단계 합계. 부서별 합계처럼 일부 열로만 묶은 집계
총계(합계)전체를 한 그룹으로 본 집계. 그룹 기준이 빈 () 이다
GROUPING(열)그 행이 열을 묶지 않은 소계·합계 행이면 1, 아니면 0
UNION ALL두 결과를 그대로 이어 붙이는 집합 연산. 그룹 함수는 여러 GROUP BY 결과를 UNION ALL한 것과 같다

세 함수 비교 (열 a, b)

함수만드는 그룹그룹 수
ROLLUP(a, b)(a, b), (a), ()n + 1 = 3단계
CUBE(a, b)(a, b), (a), (b), ()2ⁿ = 4단계
GROUPING SETS(a, b)(a), (b)적은 것만. 합계를 원하면 ()를 넣는다
GROUPING SETS((a, b), a, ())(a, b), (a), ()ROLLUP(a, b)와 같다

알아 둘 점

  • ROLLUP은 열 순서가 중요하다. ROLLUP(a, b)와 ROLLUP(b, a)는 결과가 다르다. CUBE와 GROUPING SETS는 순서가 바뀌어도 만드는 그룹은 같다
  • 소계 행에서는 묶지 않은 열이 NULL이다. 원래 데이터에 NULL이 있으면 헷갈리므로 GROUPING(열)로 구별한다
  • 보기 좋게 하려면 CASE WHEN GROUPING(job) = 1 THEN '소계' ELSE job END처럼 바꿔 쓴다
  • ROLLUP(a, (b, c))처럼 괄호로 묶으면 b, c가 한 덩어리로 취급된다

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. GROUP BY ROLLUP(deptno, job)이 만드는 집계 단계는?

  1. (deptno, job), (deptno), (job), 전체
  2. (deptno, job)만
  3. (deptno), (job)
  4. (deptno, job), (deptno), 전체
정답 보기

4번 (deptno, job), (deptno), 전체

ROLLUP은 오른쪽 열부터 하나씩 빼며 계층적 소계를 만든다. (deptno, job) → (deptno) 소계 → 전체 합계. 모든 조합을 만드는 것은 CUBE다.

Q2. 부서 3개, 직무 4개가 모든 조합으로 있을 때 GROUP BY CUBE(부서, 직무)의 결과 행 수는?

  1. 12
  2. 16
  3. 19
  4. 20
정답 보기

4번 20

상세 3×4 = 12 + 부서별 3 + 직무별 4 + 합계 1 = 20.

Q3. GROUP BY ROLLUP(a, b)와 같은 결과를 내는 것은?

  1. GROUPING SETS((a, b), a, ())
  2. GROUPING SETS(a, b)
  3. CUBE(a, b)
  4. GROUPING SETS((a, b), b, ())
정답 보기

1번 GROUPING SETS((a, b), a, ())

ROLLUP(a, b) = (a, b), (a), ().

Q4. 결과가 '부서별 합계 행들 + 직무별 합계 행들'로만 이루어졌다. 어떤 GROUP BY인가?

  1. ROLLUP(deptno, job)
  2. CUBE(deptno, job)
  3. GROUP BY deptno, job
  4. GROUPING SETS(deptno, job)
정답 보기

4번 GROUPING SETS(deptno, job)

상세·합계 없이 각각만 낸 GROUPING SETS.

Q5. GROUP BY ROLLUP(deptno)의 결과로 옳은 것은?

  1. 부서별 합계만
  2. 전체 합계만
  3. 부서별 합계 + 전체 합계 1행
  4. 가능한 모든 조합의 합계
정답 보기

3번 부서별 합계 + 전체 합계 1행

ROLLUP(a)는 (a)와 전체 합계를 만든다.

Q6. ROLLUP이 만든 전체 합계 행에서 GROUPING(deptno)의 값은?

  1. NULL
  2. 0
  3. 부서 수
  4. 1
정답 보기

4번 1

그 열이 소계로 묶인 행이면 1, 아니면 0이다.

헷갈리기 쉬운 O·X

ROLLUP(a, b)와 ROLLUP(b, a)의 결과는 같다.

정답 보기

X ROLLUP은 오른쪽부터 빼며 소계를 만들어 순서가 중요하다.

CUBE는 인수로 준 열의 가능한 모든 조합으로 소계를 만든다.

정답 보기

O 열 n개면 2ⁿ개의 그룹 단위.

GROUPING SETS(a, b)는 전체 합계 행을 자동으로 포함한다.

정답 보기

X 적은 그룹만 만든다. 합계를 원하면 ()를 넣는다.

함께 보면 좋은 개념