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 쿼리를 작성할 수 있다! 🚀