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

[oracle] 그룹함수 ROLLUP - 이해하기 쉽게

by 플랜비BB 2024. 8. 7.
ROLLUP은 SQL에서 그룹화된 데이터에 대해 여러 수준의 집계를 생성하는 기능이다. 이는 데이터 분석과 보고서 작성에서 유용하며, 한 번의 쿼리로 다양한 집계 수준의 결과를 얻을 수 있도록 도와준다.

 

0. ROLLUP의 원리

패턴만 익히면 어렵지 않다.

SELECT 지역, 제품, SUM(sales)
FROM sales
GROUP BY ROLLUP(지역, 제품);

1. 지역과 제품별 합계
2. 지역별 합계
3. 전체 합계

GROUP BY ROLLUP(A, B);
1. A B
2. A
3. ()

// ()의 의미는 전체에 대한 결과를 출력한다는 의미이다.

예제쿼리.txt
0.00MB

 

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. 지역별 매출 합계

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. ()

 

3. 지역과 제품별 매출 합계

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. ()

 

4. 지역, 제품, 유통업체별 매출 합계

SELECT region, product, retail, SUM(sales)
FROM sales
GROUP BY ROLLUP(region, product, retail);

REGION          PRODUCT         RETAIL          SUM(SALES)
--------------- --------------- --------------- ----------
East            Apples          E-Mart                 100 -- 지역, 제품, 유통업체별 총합계
East            Apples          Homeplus               200
East            Apples                                 300 -- 지역과 제품별 총합계
East            Oranges         E-Mart                 250
East            Oranges         Homeplus               150
East            Oranges                                400
East                                                   700 -- 지역별 총합계
West            Apples          E-Mart                 300
West            Apples          Homeplus               400
West            Apples                                 700
West            Oranges         E-Mart                 150
West            Oranges         Homeplus               350
West            Oranges                                500
West                                                  1200
                                                      1900 -- 전체 총합계

-- 패턴
GROUP BY ROLLUP(A, B, C);
1. A B C
2. A B
3. A
4. ()

 

5. 응용 패턴

GROUP BY ROLLUP(A, B, C);
    1. A B C
    2. A B
    3. A
    4. ()

GROUP BY ROLLUP(A, (B, C));
    1. A (B C)
    2. A
    3. ()

GROUP BY A ROLLUP((B, C));
    1. A (B C)
    2. A

// 괄호로 묶여져 있는 컬럼은 하나로 본다.

 

6. 응용 패턴 예시

-- GROUP BY ROLLUP(A, (B, C));
SELECT region, product, retail, SUM(sales)
FROM sales
GROUP BY ROLLUP(region, (product, retail));

REGION          PRODUCT         RETAIL          SUM(SALES)
--------------- --------------- --------------- ----------
East            Apples          E-Mart                 100 -- 지역, 제품, 유통업체별 총합계
East            Apples          Homeplus               200
East            Oranges         E-Mart                 250
East            Oranges         Homeplus               150
East                                                   700 -- 지역별 총합계
West            Apples          E-Mart                 300
West            Apples          Homeplus               400
West            Oranges         E-Mart                 150
West            Oranges         Homeplus               350
West                                                  1200
                                                      1900 -- 전체 총합계

-- 패턴
GROUP BY ROLLUP(A, (B, C));
1. A B C
2. A B -- 이 부분이 빠짐(지역과 제품별 총합계)
3. A
4. ()

-- B와 C를 한 묶음 X로 생각하면 아래와 같은 패턴이다.
GROUP BY ROLLUP(A, X);
1. A X
2. A
3. ()
-- GROUP BY A ROLLUP((B, C));
SELECT region, product, retail, SUM(sales)
FROM sales
GROUP BY region, ROLLUP((product, retail));

REGION          PRODUCT         RETAIL          SUM(SALES)
--------------- --------------- --------------- ----------
East            Apples          E-Mart                 100 -- 지역, 제품, 유통업체별 총합계
East            Apples          Homeplus               200
East            Oranges         E-Mart                 250
East            Oranges         Homeplus               150
East                                                   700 -- 지역별 총합계
West            Apples          E-Mart                 300
West            Apples          Homeplus               400
West            Oranges         E-Mart                 150
West            Oranges         Homeplus               350
West                                                  1200

-- 그룹바이절 A는 롤업의 결과와 합쳐준다고 생각하면 편하다.
GROUP BY ROLLUP((B, C));
1. B C
2. ()

GROUP BY A ROLLUP((B, C));
1. A + B C = A B C
2. A + () = A

 

[oracle] 그룹함수 CUBE - 이해하기 쉽게
[oracle] 그룹함수 GROUPING SETS - 이해하기 쉽게
[oracle] 그룹함수 ROLLUP / CUBE / GROUPING SETS