ROLLUP 함수란?ROLLUP은 SQL의 GROUP BY 확장 기능으로, 계층적인 집계 결과를 자동으로 생성하는 데 사용됩니다.
일반적인 GROUP BY는 특정 그룹별로만 집계를 하지만, ROLLUP을 사용하면 중간 합계와 총합까지 자동으로 계산할 수 있습니다.
ROLLUP 기본 문법SELECT 컬럼1, 컬럼2, 집계함수
FROM 테이블
GROUP BY ROLLUP(컬럼1, 컬럼2);
🔹 ROLLUP(컬럼1, 컬럼2) → 계층적인 그룹핑 및 합계를 자동 생성
🔹 마지막에 NULL 값이 있는 행이 나오면 그 부분은 중간 합계 또는 총합을 의미
ROLLUP 사용 예제| region | product | sales_amount |
|---|---|---|
| A | X | 100 |
| A | Y | 150 |
| B | X | 200 |
| B | Y | 250 |
ROLLUP을 사용한 쿼리SELECT region, product, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY ROLLUP(region, product);
결과:
| region | product | total_sales |
|--------|--------|------------|
| A | X | 100 |
| A | Y | 150 |
| A | NULL | 250 (A지역 총합) |
| B | X | 200 |
| B | Y | 250 |
| B | NULL | 450 (B지역 총합) |
| NULL | NULL | 700 (전체 총합) |
✔️ 동작 방식
1. (region, product) 별로 SUM(sales_amount) 계산
2. 각 지역(region)의 총합 추가 (region별 NULL 등장)
3. 전체 총합 추가 (최상단 NULL, NULL 등장)
ROLLUP vs GROUP BY vs CUBE| 기능 | GROUP BY | ROLLUP | CUBE |
|---|---|---|---|
| 기본 그룹별 집계 | ✅ | ✅ | ✅ |
| 중간 합계 계산 | ❌ | ✅ | ✅ |
| 전체 총합 계산 | ❌ | ✅ | ✅ |
| 모든 조합 집계 | ❌ | ❌ | ✅ |
CUBE와의 차이ROLLUP(a, b) → (a, b), (a, NULL), (NULL, NULL) (계층적 집계)CUBE(a, b) → (a, b), (a, NULL), (NULL, b), (NULL, NULL) (모든 조합)ROLLUP 실전 예제SELECT year, quarter, SUM(sales) AS total_sales
FROM sales_data
GROUP BY ROLLUP(year, quarter);
📌 출력 결과:
| year | quarter | total_sales |
|------|---------|------------|
| 2023 | Q1 | 50000 |
| 2023 | Q2 | 60000 |
| 2023 | NULL | 110000 (2023년 총합) |
| 2024 | Q1 | 70000 |
| 2024 | Q2 | 80000 |
| 2024 | NULL | 150000 (2024년 총합) |
| NULL | NULL | 260000 (전체 총합) |
✅ 연도별, 분기별 매출을 보고 싶은데, 연도별 합계와 전체 합계까지 자동 생성
ROLLUP의 핵심 기능 |
|---|
| 그룹별 집계를 생성 |
| 중간 합계를 자동 계산 |
| 전체 합계를 자동 추가 |
| 계층적 데이터를 다룰 때 유용 |
📌 ROLLUP을 사용하면 GROUP BY로 여러 개의 쿼리를 작성해야 할 일을 한 번에 해결 가능! 🚀