SQL 그룹 함수: ROLLUP, CUBE, GROUPING SETS 활용
SQL의 그룹 함수(Grouping Functions)는 데이터를 다양한 계층으로 요약하여 분석할 때 사용됩니다.
특히 ROLLUP, CUBE, GROUPING SETS는 GROUP BY와 함께 사용되며, 다차원 데이터 요약을 수행하는 데 유용합니다.
이번 글에서는 각 함수의 개념과 사용 방법을 샘플 테이블과 함께 알아보겠습니다.
1. ROLLUP: 계층적 데이터 요약 집계
ROLLUP은 GROUP BY와 함께 사용하여 계층적 그룹화 데이터를 자동으로 생성하는 함수입니다.
일반적인 GROUP BY보다 더 높은 수준의 집계를 포함하여 데이터를 요약할 수 있습니다.
SELECT Department, Product, SUM(Sales) AS TotalSales
FROM SalesData
GROUP BY ROLLUP(Department, Product);
이 쿼리는 Department(부서)와 Product(상품) 별로 계층적 집계 결과를 생성합니다. ROLLUP은 그룹별 총합뿐만 아니라 최상위 그룹(전체 합계)까지 자동으로 계산해 줍니다.
출력 결과 예시
Department | Product | TotalSales |
Electronics | Laptop | 5000 |
Electronics | Mobile | 3000 |
Electronics | NULL | 8000 (부서 합계) |
Furniture | Chair | 2000 |
Furniture | Desk | 4000 |
Furniture | NULL | 6000 (부서 합계) |
NULL | NULL | 14000 (전체 합계) |
✅ NULL 값이 있는 행이 추가되면서, 각 그룹의 합계를 자동으로 계산합니다.
✅ ROLLUP(A, B)는 A별 합계, A-B별 합계, 전체 합계를 자동 생성합니다.
2. CUBE: 모든 조합에 대한 집계 생성
CUBE는 ROLLUP과 유사하지만, 모든 가능한 조합의 그룹화 데이터를 생성합니다.
즉, 각 칼럼 조합에 대해 총합을 계산하므로 ROLLUP보다 더 다양한 결과를 제공합니다.
SELECT Department, Product, SUM(Sales) AS TotalSales
FROM SalesData
GROUP BY CUBE(Department, Product);
이 쿼리는 Department(부서)와 Product(상품)의 모든 가능한 조합에 대해 집계를 생성합니다.
출력 결과 예시
Department | Product | TotalSales |
Electronics | Laptop | 5000 |
Electronics | Mobile | 3000 |
Electronics | NULL | 8000 (부서 합계) |
NULL | Laptop | 5000 (상품 합계) |
NULL | Mobile | 3000 (상품 합계) |
Furniture | Chair | 2000 |
Furniture | Desk | 4000 |
Furniture | NULL | 6000 (부서 합계) |
NULL | Chair | 2000 (상품 합계) |
NULL | Desk | 4000 (상품 합계) |
NULL | NULL | 14000 (전체 합계) |
✅ ROLLUP과 달리, CUBE(A, B)는 A별 합계, B별 합계, A-B별 합계, 전체 합계까지 생성합니다.
✅ 모든 칼럼의 조합별로 그룹화된 데이터를 조회할 때 유용합니다.
3. GROUPING SETS: 특정 조합의 집계만 생성
GROUPING SETS는 ROLLUP과 CUBE와 달리, 사용자가 원하는 조합에 대해서만 그룹화를 수행할 수 있는 기능을 제공합니다.
SELECT Department, Product, SUM(Sales) AS TotalSales
FROM SalesData
GROUP BY GROUPING SETS(
(Department, Product),
(Department),
(Product),
()
);
이 쿼리는 Department(부서)-Product(상품), Department별, Product별, 전체 합계만을 생성합니다.
즉, ROLLUP이나 CUBE처럼 모든 조합을 계산하지 않고 필요한 그룹화만 수행합니다.
출력 결과 예시
Department | Product | TotalSales |
Electronics | Laptop | 5000 |
Electronics | Mobile | 3000 |
Furniture | Chair | 2000 |
Furniture | Desk | 4000 |
Electronics | NULL | 8000 (부서 합계) |
Furniture | NULL | 6000 (부서 합계) |
NULL | Laptop | 5000 (상품 합계) |
NULL | Mobile | 3000 (상품 합계) |
NULL | Chair | 2000 (상품 합계) |
NULL | Desk | 4000 (상품 합계) |
NULL | NULL | 14000 (전체 합계) |
✅ 필요한 조합만 지정할 수 있어, 불필요한 데이터까지 계산하는 것을 방지합니다.
✅ ROLLUP과 CUBE보다 성능이 뛰어나며, 보고서 생성 시 유용합니다.
4. SQL 그룹 함수 비교 정리
연산자 | 설명 | 집계 방식 | 사용 예시 |
ROLLUP | 계층적 그룹화 집계 (부서별 → 전체) | 상위 수준으로 그룹화 | 부서-상품별 판매량 분석 |
CUBE | 모든 조합의 집계를 생성 | 다차원 데이터 요약 | 부서·상품 개별 집계 필요 시 |
GROUPING SETS | 특정 그룹 조합만 선택하여 집계 | 사용자가 정의한 조합 | 맞춤형 보고서 생성 |
5. 결론
✅ ROLLUP → 계층적 데이터 요약, 특정 기준별 집계 계산.
✅ CUBE → 모든 가능한 조합에 대한 집계 생성, 다차원 분석 가능.
✅ GROUPING SETS → 필요한 조합만 지정하여 효율적인 그룹화 수행.
✅ 데이터 분석 및 보고서 생성 시, 필요한 방식에 따라 적절한 그룹 함수를 선택해야 함.
SQLD 자격증 대비를 위해 각 그룹 함수의 개념과 차이점, 실행 순서를 정확히 이해하고 실습해 보세요!