1. ROLLUP을 사용한 소계와 합계
ROLLUP은 데이터를 그룹화하고, 각 그룹의 소계와 전체 합계를 계산합니다.
구문
sql
코드 복사
SELECT 컬럼1, 컬럼2, ..., 집계함수
FROM 테이블명
GROUP BY ROLLUP(컬럼1, 컬럼2, ...);
2. 예제: 판매 데이터 소계와 합계
판매 데이터를 기준으로 각 지역(Region)과 제품(Product)의 매출 소계와 합계를 표시하는 예제입니다.
샘플 테이블
sql
코드 복사
CREATE TABLE Sales (
Region NVARCHAR(50),
Product NVARCHAR(50),
Amount DECIMAL(10, 2)
);
INSERT INTO Sales VALUES
('East', 'Product A', 100.00),
('East', 'Product B', 200.00),
('West', 'Product A', 300.00),
('West', 'Product B', 400.00);
ROLLUP을 활용한 쿼리
sql
코드 복사
SELECT
ISNULL(Region, 'Total') AS Region,
ISNULL(Product, 'Subtotal') AS Product,
SUM(Amount) AS TotalAmount
FROM Sales
GROUP BY ROLLUP(Region, Product)
ORDER BY Region, Product;
결과
Region Product TotalAmount
East | Product A | 100.00 |
East | Product B | 200.00 |
East | Subtotal | 300.00 |
West | Product A | 300.00 |
West | Product B | 400.00 |
West | Subtotal | 700.00 |
Total | Subtotal | 1000.00 |
3. GROUPING 함수로 소계/합계 표시
GROUPING 함수를 사용하면 소계나 합계를 구분할 수 있습니다.
쿼리
sql
코드 복사
SELECT
CASE
WHEN GROUPING(Region) = 1 THEN 'Total'
ELSE Region
END AS Region,
CASE
WHEN GROUPING(Product) = 1 THEN 'Subtotal'
ELSE Product
END AS Product,
SUM(Amount) AS TotalAmount
FROM Sales
GROUP BY ROLLUP(Region, Product)
ORDER BY Region, Product;
- GROUPING 함수: 각 컬럼이 그룹화된 항목인지 확인(1이면 소계/합계).
4. UNION ALL을 사용한 방법
ROLLUP 대신 직접 UNION ALL로 소계와 합계를 추가하는 방법도 있습니다.
쿼리
sql
코드 복사
SELECT Region, Product, SUM(Amount) AS TotalAmount
FROM Sales
GROUP BY Region, Product
UNION ALL
SELECT Region, 'Subtotal', SUM(Amount)
FROM Sales
GROUP BY Region
UNION ALL
SELECT 'Total', 'Subtotal', SUM(Amount)
FROM Sales
ORDER BY Region, Product;
요약
- ROLLUP: 소계와 합계를 자동으로 계산하며 코드가 간결합니다.
- GROUPING 함수: 소계/합계를 구분하거나 표시를 사용자화할 때 사용합니다.
- UNION ALL: 더 복잡하지만 원하는 형태로 세부적인 제어가 가능합니다.
'SQL' 카테고리의 다른 글
UNION ALL 만 사용 가능한 상황 (0) | 2024.12.06 |
---|---|
ROLLUP이 가장 빠른 이유 (0) | 2024.12.06 |
MSSQL에서 IF문과 CASE WHEN 차이점 알아보기 (0) | 2024.12.06 |
MSSQL에서 삽입, 수정, 삭제 구문 (0) | 2024.12.06 |
SQL Server에서 암호화 및 복호화: 상세 가이드 (1) | 2024.09.14 |