SQL에서 ROLLUP
과 CUBE
는 그룹별로 다양한 수준의 집계 데이터를 생성할 때 유용한 함수다.
둘 다 GROUP BY
절과 함께 사용되며, 계층적인 집계를 만들 수 있다.
하지만 두 함수의 동작 방식에는 차이가 있다.
이번 글에서는 ROLLUP
과 CUBE
의 개념을 예제와 함께 쉽게 설명해보겠다.
ROLLUP
과 CUBE
의 개념함수 | 특징 | 주 사용처 |
---|---|---|
ROLLUP | 계층적인 집계 (위에서 아래로 단계별) | 매출 분석, 분기별 집계 |
CUBE | 가능한 모든 조합을 집계 | 다차원 분석 (OLAP) |
ROLLUP
이란?GROUP BY
에서 지정한 가장 마지막 컬럼부터 단계적으로 그룹을 제거하면서 집계를 수행한다. CUBE
란?ROLLUP
보다 더 많은 집계 데이터를 생성한다. ROLLUP
예제sales
테이블)region | product | month | sales |
---|---|---|---|
East | A | Jan | 100 |
East | A | Feb | 200 |
East | B | Jan | 150 |
East | B | Feb | 250 |
West | A | Jan | 120 |
West | A | Feb | 220 |
West | B | Jan | 170 |
West | B | Feb | 270 |
이제 region
, product
, month
별로 매출을 집계하려고 한다.
SELECT region, product, month, SUM(sales) AS total_sales
FROM sales
GROUP BY ROLLUP(region, product, month);
🔹 결과
region | product | month | total_sales |
---|---|---|---|
East | A | Jan | 100 |
East | A | Feb | 200 |
East | A | NULL | 300 |
East | B | Jan | 150 |
East | B | Feb | 250 |
East | B | NULL | 400 |
East | NULL | NULL | 700 |
West | A | Jan | 120 |
West | A | Feb | 220 |
West | A | NULL | 340 |
West | B | Jan | 170 |
West | B | Feb | 270 |
West | B | NULL | 440 |
West | NULL | NULL | 780 |
NULL | NULL | NULL | 1480 |
ROLLUP(region, product, month)
의 동작 방식1️⃣ region
, product
, month
별 총 매출
2️⃣ region
, product
별 총 매출 (month
값이 NULL)
3️⃣ region
별 총 매출 (product
와 month
값이 NULL)
4️⃣ 전체 총합 (region
, product
, month
모두 NULL)
✔ 특징: ROLLUP
은 계층적인 집계를 생성하며, 마지막 단계에서 전체 합계를 구한다.
CUBE
예제같은 데이터를 CUBE
로 그룹화하면 어떻게 될까?
SELECT region, product, month, SUM(sales) AS total_sales
FROM sales
GROUP BY CUBE(region, product, month);
🔹 결과
region | product | month | total_sales |
---|---|---|---|
East | A | Jan | 100 |
East | A | Feb | 200 |
East | A | NULL | 300 |
East | B | Jan | 150 |
East | B | Feb | 250 |
East | B | NULL | 400 |
East | NULL | NULL | 700 |
West | A | Jan | 120 |
West | A | Feb | 220 |
West | A | NULL | 340 |
West | B | Jan | 170 |
West | B | Feb | 270 |
West | B | NULL | 440 |
West | NULL | NULL | 780 |
NULL | A | Jan | 220 |
NULL | A | Feb | 420 |
NULL | A | NULL | 640 |
NULL | B | Jan | 320 |
NULL | B | Feb | 520 |
NULL | B | NULL | 840 |
NULL | NULL | Jan | 420 |
NULL | NULL | Feb | 740 |
NULL | NULL | NULL | 1480 |
CUBE(region, product, month)
의 동작 방식1️⃣ region
, product
, month
별 총 매출
2️⃣ region
, product
별 총 매출
3️⃣ region
, month
별 총 매출
4️⃣ product
, month
별 총 매출
5️⃣ region
별 총 매출
6️⃣ product
별 총 매출
7️⃣ month
별 총 매출
8️⃣ 전체 총합
✔ 특징: CUBE
는 모든 가능한 조합을 만들어서 집계한다.
ROLLUP
vs CUBE
차이 비교ROLLUP(region, product, month) | CUBE(region, product, month) | |
---|---|---|
region, product, month 그룹화 | ✅ | ✅ |
region, product 별 총합 | ✅ | ✅ |
region, month 별 총합 | ✅ | ✅ |
product, month 별 총합 | ❌ | ✅ |
region 별 총합 | ✅ | ✅ |
product 별 총합 | ❌ | ✅ |
month 별 총합 | ❌ | ✅ |
전체 총합 | ✅ | ✅ |
✔ ROLLUP
은 계층적인 집계만 포함하지만,
✔ CUBE
는 모든 조합을 고려한 다차원 집계를 수행한다.
✅ ROLLUP을 사용할 때
년 → 분기 → 월
단위로 매출 분석할 때 ✅ CUBE를 사용할 때
✔ ROLLUP: 계층적인 집계를 생성 (특정 기준으로 단계적으로 그룹화)
✔ CUBE: 가능한 모든 조합의 집계를 생성 (더 많은 데이터 제공)
✔ ROLLUP은 한 방향의 그룹화, CUBE는 모든 방향의 그룹화
데이터 분석 목적에 따라 적절한 함수를 사용하면 더 효과적인 SQL 쿼리를 작성할 수 있다! 🚀