본문 바로가기
SQL Professional

[독학! SQLP] 그룹핑 쿼리

by 개발자의 2025. 8. 20.

개념 요약

구분 설명 결과 집합 특징
GROUPING SETS 여러 GROUP BY 집합을 한 쿼리에서 동시에 수행 결과가 UNION ALL과 유사 (각 grouping 별 결과 따로)
ROLLUP 계층적(위계적) 합계 생성 (→ 부분합 + 총합) n개의 컬럼이면 n+1 단계의 집계
CUBE 가능한 모든 컬럼 조합의 합계 생성 (→ 다차원 집계) n개의 컬럼이면 2^n 조합 결과

예시 SQL & 결과

CREATE TABLE Sales (
    region   VARCHAR(10),
    product  VARCHAR(10),
    amount   NUMBER
);

INSERT INTO Sales VALUES ('서울', 'A', 100);
INSERT INTO Sales VALUES ('서울', 'B', 200);
INSERT INTO Sales VALUES ('부산', 'A', 150);
INSERT INTO Sales VALUES ('부산', 'B', 300);

 

1) GROUPING SETS

SELECT region, product, SUM(amount)
FROM Sales
GROUP BY GROUPING SETS ((region), (product));

 

region product SUM(amount)
서울 NULL 300
부산 NULL 450
NULL A 250
NULL B 500

region별 합계 + product별 합계를 한 번에 출력. (UNION ALL 느낌)

2) ROLLUP

SELECT region, product, SUM(amount)
FROM Sales
GROUP BY ROLLUP(region, product);
region product SUM(amount)
서울 A 100
서울 B 200
서울 NULL 300
부산 A 150
부산 B 300
부산 NULL 450
NULL NULL 750

→ 계층적: region+productregion → 전체

 

ROLLUP 칼럼 순서를 바꾸면?

SELECT region, product, SUM(amount)
FROM Sales
GROUP BY ROLLUP(product, region);
region product SUM(amount)
서울 A 100
부산 A 150
NULL A 250
서울 B 200
부산 B 300
NULL B 500
NULL NULL 750

 ROLLUP은 순서에 따라 어떤 집계가 중간에 나오느냐가 달라진다

3) CUBE

SELECT region, product, SUM(amount)
FROM Sales
GROUP BY CUBE(region, product);

 

region product SUM(amount)
서울 A 100
서울 B 200
서울 NULL 300
부산 A 150
부산 B 300
부산 NULL 450
NULL A 250
NULL B 500
NULL NULL 750

→ 모든 조합 (부분합 + 총합). 다차원 OLAP 느낌.

4) GROUPING 함수

해당 칼럼이 집계로 인해 NULL인지 여부 확인 (0/1 반환)

SELECT region
     , product
     , SUM(amount) AS total
     , GROUPING(region) AS g_region
     , GROUPING(product) AS g_product
  FROM Sales
 GROUP BY ROLLUP(region, product);
region product total g_region g_product
서울 A 100 0 0
서울 B 200 0 0
서울 NULL 300 0 1
부산 A 150 0 0
부산 B 300 0 0
부산 NULL 450 0 1
NULL NULL 750 1 1

이런 성질을 이용해 아래와 같이 NULL 핸들링 가능.

CASE 
  WHEN GROUPING(region) = 1 THEN '전체지역'
  ELSE region 
END

정리

  • ROLLUP(...) → 계층적 요약 (n+1 단계)
  • CUBE(...) → 모든 조합 요약 (2^n 결과)
  • GROUPING SETS(...) → 특정 그룹핑 집합만 선택 가능 (UNION ALL 효과)
  • 그룹핑 쿼리에서 NULL 의미: 상위 집계 레벨을 나타냄 (주의! 실제 NULL 아님)

'SQL Professional' 카테고리의 다른 글

[독학! SQLP] 트랜잭션  (1) 2025.08.20
[독학! SQLP] SQL 조인!  (6) 2025.08.20
[독학! SQLP] 함수 정리!  (0) 2025.08.20
[독학! SQLP] NULL에 관하여!  (0) 2025.08.19
[독학! SQLP] DCL? DDL? DML? TCL?  (0) 2025.08.19