나의 잡다한 노트 및 메모
ROLLUP 이란? 본문
ROLLUP은 SQL의 GROUP BY 확장 기능 중 하나로, 집계 결과에 대한 계층적(subtotal) 요약 집계를 자동으로 생성할 수 있게 해줍니다. 이를 통해 여러 수준의 집계 결과(부분 합계와 전체 합계)를 한 번의 쿼리로 구할 수 있습니다.
ROLLUP은 GROUP BY를 확장하여 여러 수준의 집계(부분 합계, 총합계 등)를 한 번에 계산할 수 있는 기능
1. 기본 개념
- 목적:
ROLLUP은 그룹화한 데이터에 대해, 지정한 컬럼들을 기반으로 하위 수준부터 최상위(전체)의 집계 결과를 자동으로 생성합니다. - 계층적 집계:
예를 들어, 부서별, 그리고 부서 내의 직급별 매출 집계를 구하는 경우, ROLLUP을 사용하면 부서별 합계와 전체 합계를 함께 산출할 수 있습니다.
2. ROLLUP 구문
ROLLUP은 GROUP BY 절 내에서 사용되며, 여러 컬럼을 지정할 때 그 순서에 따라 계층 구조가 결정됩니다.
sql
복사
SELECT col1, col2, aggregate_function(col3) FROM table GROUP BY ROLLUP (col1, col2);
- 동작 방식:
위 구문은 다음과 같은 단계로 집계를 수행합니다:- 첫 번째 단계: col1과 col2의 조합별 집계 (가장 상세한 수준)
- 두 번째 단계: col1별 집계 (즉, col2를 무시한 합계)
- 세 번째 단계: 전체 집계 (모든 그룹의 합계)
- 각 집계 단계에서, 해당 수준의 컬럼은 실제 값이 나오고, 집계 레벨이 올라갈수록 그룹화되지 않은 컬럼에는 NULL 값이 나타납니다.
3. 예시
예를 들어, 다음과 같은 판매 데이터를 가진 테이블이 있다고 가정합시다:
region product sales
North | A | 100 |
North | B | 150 |
South | A | 200 |
South | B | 250 |
아래와 같이 ROLLUP을 사용하면:
SELECT region, product, SUM(sales) AS total_sales
FROM sales_table
GROUP BY ROLLUP (region, product);
결과는 다음과 같이 나올 수 있습니다:
region product total_sales
North | A | 100 |
North | B | 150 |
North | NULL | 250 |
South | A | 200 |
South | B | 250 |
South | NULL | 450 |
NULL | NULL | 700 |
- 여기서 NULL은 해당 수준에서 집계가 이루어졌음을 의미합니다.
4. 장점 및 활용
- 효율성:
별도의 쿼리를 여러 번 작성할 필요 없이, 하나의 쿼리로 상세 집계와 총합을 모두 산출할 수 있어 코드가 간결해집니다. - 보고서 작성:
보고서나 대시보드에서 부분 합계와 전체 합계를 동시에 제공할 때 유용합니다.
5. 주의사항
- 지원 여부:
모든 DBMS가 ROLLUP을 지원하는 것은 아니며, 각 시스템에 따라 문법이나 기능이 다소 차이가 있을 수 있습니다. - NULL 처리:
결과에서 NULL 값이 집계 수준을 표시하는데 사용되므로, 이를 해석하거나 표시할 때 주의가 필요합니다.
'DB > SQL' 카테고리의 다른 글
fact 란? (0) | 2025.03.02 |
---|---|
Dimension 이란 용어란? (0) | 2025.03.02 |
DB에서 쓰이는 함수들 (0) | 2025.02.22 |
DB에서 Join의 필요성 (0) | 2025.02.06 |
SQL 쿼리 기본적인 것들 정리 (SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ) (0) | 2025.01.21 |