ROLLUP, CUBE, GROUPING SETS는 SQL에서 그룹화된 데이터에 대해 여러 수준의 집계를 생성하는 기능이다. 각 함수마다 비슷한듯 다른 출력결과를 가진다. 헷갈릴 수 있으니 한번쯤 비교해서 알아보자.
0. 각 함수의 원리
패턴만 익히면 어렵지 않다.
-- ROLLUP
GROUP BY ROLLUP(A, B);
1. A B
2. A
3. ()
-- CUBE
GROUP BY CUBE(A, B);
1. A B
2. A
3. B
4. ()
-- GROUPING SETS
GROUP BY GROUPING SETS(A, B);
1. A
2. B
// ()의 의미는 전체에 대한 결과를 출력한다는 의미이다.
-- ROLLUP
GROUP BY ROLLUP(A, B, C);
1. A B C
2. A B
3. A
4. ()
-- CUBE
GROUP BY CUBE(A, B, C);
0. A B C
1. A B
2. A C
3. A
4. B C
5. B
6. C
7. ()
-- GROUPING SETS
GROUP BY GROUPING SETS(A, B, C);
1. A
2. B
3. C
1. 예제테이블
ID REGION PRODUCT RETAIL SALES
---------- --------------- --------------- --------------- ----------
1 East Apples E-Mart 100
2 East Apples Homeplus 200
3 East Oranges E-Mart 250
4 East Oranges Homeplus 150
5 West Apples E-Mart 300
6 West Apples Homeplus 400
7 West Oranges E-Mart 150
8 West Oranges Homeplus 350
2. 지역별 매출 합계 (ROLLUP / CUBE / GROUPING SETS 비교)
-- ROLLUP
SELECT region, SUM(sales)
FROM sales
GROUP BY ROLLUP (region);
REGION SUM(SALES)
--------------- ----------
East 700 -- 지역별 총합계
West 1200
1900 -- 전체 총합계
-- 패턴
GROUP BY ROLLUP(A);
1. A
2. ()
-- CUBE
SELECT region, SUM(sales)
FROM sales
GROUP BY CUBE (region);
REGION SUM(SALES)
--------------- ----------
1900 -- 전체 총합계
East 700 -- 지역별 총합계
West 1200
-- 패턴
GROUP BY CUBE(A);
1. A
2. ()
-- GROUPING SETS
SELECT region, SUM(sales)
FROM sales
GROUP BY GROUPING SETS (region);
REGION SUM(SALES)
--------------- ----------
East 700 -- 지역별 총합계
West 1200
-- 패턴
GROUP BY GROUPING SETS(A);
1. A
3. 지역과 제품별 매출 합계
-- ROLLUP
SELECT region, product, SUM(sales)
FROM sales
GROUP BY ROLLUP(region, product);
REGION PRODUCT SUM(SALES)
--------------- --------------- ----------
East Apples 300 -- 지역과 제품별 총합계
East Oranges 400
East 700 -- 지역별 총합계
West Apples 700
West Oranges 500
West 1200
1900 -- 전체 총합계
-- 패턴
GROUP BY ROLLUP(A, B);
1. A B
2. A
3. ()
-- CUBE
SELECT region, product, SUM(sales)
FROM sales
GROUP BY CUBE(region, product);
REGION PRODUCT SUM(SALES)
--------------- --------------- ----------
1900 -- 전체 총합계
Apples 1000 -- 제품별 총합계
Oranges 900
East 700 -- 지역별 총합계
East Apples 300 -- 지역과 제품별 총합계
East Oranges 400
West 1200
West Apples 700
West Oranges 500
-- 패턴
GROUP BY CUBE(A, B);
1. A B
2. A
3. B
4. ()
-- GROUPING SETS
SELECT region, product, SUM(sales)
FROM sales
GROUP BY GROUPING SETS (region, product);
REGION PRODUCT SUM(SALES)
--------------- --------------- ----------
East 700 -- 지역별 총합계
West 1200
Oranges 900 -- 제품별 총합계
Apples 1000
-- 패턴
GROUP BY GROUPING SETS(A, B);
1. A
2. B
[oracle] 그룹함수 ROLLUP - 이해하기 쉽게
[oracle] 그룹함수 CUBE - 이해하기 쉽게
[oracle] 그룹함수 GROUPING SETS - 이해하기 쉽게