본문 바로가기
카테고리 없음

[oracle] 그룹함수 비교 ROLLUP / CUBE / GROUPING SETS

by 플랜비BB 2024. 8. 8.
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

예제쿼리.txt
0.00MB

 

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 - 이해하기 쉽게