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

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

by 플랜비BB 2024. 8. 8.
여러 그룹핑 쿼리를 UNION ALL 한 것과 같은 결과를 만들 수 있다.

 

0. GROUPING SETS의 원리

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

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

1. 지역별 합계
2. 제품별 합계

GROUP BY GROUPING SETS(A, B);
1. A
2. B

예제쿼리.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 GROUPING SETS (region);

REGION          SUM(SALES)
--------------- ----------
East                   700 -- 지역별 총합계
West                  1200

-- 패턴
GROUP BY GROUPING SETS(A);
1. A

 

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

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

 

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

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

REGION          PRODUCT         RETAIL          SUM(SALES)
--------------- --------------- --------------- ----------
East                                                   700 -- 지역별 총합계
West                                                  1200
                Oranges                                900 -- 제품별 총합계
                Apples                                1000
                                Homeplus              1100 -- 유통업체별 총합계
                                E-Mart                 800
                                
-- 패턴
GROUP BY GROUPING SETS(A, B, C);
1. A
2. B
3. C

 

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

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

REGION          PRODUCT         RETAIL          SUM(SALES)
--------------- --------------- --------------- ----------
East                                                   700 -- 지역별 총합계
West                                                  1200
                Oranges                                900 -- 제품별 총합계
                Apples                                1000
                                E-Mart                 800 -- 유통업체별 총합계
                                Homeplus              1100
                                                      1900 -- 전체 총합계

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

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

 

6. 응용 패턴

-- GROUPING SETS
GROUP BY GROUPING SETS(A)
	1. A
GROUP BY GROUPING SETS(A, B)
	1. A
	2. B
GROUP BY GROUPING SETS(A, B, C)
	1. A
	2. B
	3. C
GROUP BY GROUPING SETS((A, B))
	1. A B
GROUP BY GROUPING SETS((A, B), C)
	1. A B
	2. C
GROUP BY GROUPING SETS((A, B, C),())
	1. A B C
	2. ()
GROUP BY GROUPING SETS((A, B),(B, C))
	1. A B
	2. B C
    
// 괄호로 묶여져 있는 컬럼은 하나로 본다.

 

7. 응용 패턴 예시

-- GROUPING SETS((A, B))
SELECT region, product, SUM(sales)
FROM sales
GROUP BY GROUPING SETS ((region, product));

REGION          PRODUCT         SUM(SALES)
--------------- --------------- ----------
West            Oranges                500	-- 지역과 제품별 총합계
East            Apples                 300
East            Oranges                400
West            Apples                 700

-- 패턴
GROUP BY GROUPING SETS((A, B))
1. A B
-- GROUPING SETS((A, B), C)
SELECT region, product, retail, SUM(sales)
FROM sales
GROUP BY GROUPING SETS ((region, product), retail);

REGION          PRODUCT         RETAIL          SUM(SALES)
--------------- --------------- --------------- ----------
West            Oranges                                500 -- 지역과 제품별 총합계
East            Apples                                 300
East            Oranges                                400
West            Apples                                 700
                                Homeplus              1100 -- 유통업체별 총합계
                                E-Mart                 800
                                
-- 패턴
GROUP BY GROUPING SETS((A, B), C)
1. A B
2. C
-- GROUPING SETS((A, B, C),())
SELECT region, product, retail, SUM(sales)
FROM sales
GROUP BY GROUPING SETS ((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
West            Apples          E-Mart                 300
West            Apples          Homeplus               400
West            Oranges         E-Mart                 150
West            Oranges         Homeplus               350
                                                      1900 -- 전체 총합계

-- 패턴
GROUP BY GROUPING SETS((A, B, C),())
1. A B C
2. ()
-- GROUPING SETS((A, B),(B, C))
SELECT region, product, retail, SUM(sales)
FROM sales
GROUP BY GROUPING SETS ((region, product),(product, retail));

REGION          PRODUCT         RETAIL          SUM(SALES)
--------------- --------------- --------------- ----------
West            Oranges                                500 -- 지역과 제품별 총합계
East            Apples                                 300
East            Oranges                                400
West            Apples                                 700
                Apples          Homeplus               600 -- 제품과 유통업체별 총합계
                Oranges         Homeplus               500
                Oranges         E-Mart                 400
                Apples          E-Mart                 400

-- 패턴
GROUP BY GROUPING SETS((A, B),(B, C))
1. A B
2. B C

 

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