GROUPING SETS 절

    GROUPING SETS은 ROLLUP이나 CUBE처럼 GROUP BY 절에 명시해서 그룹 쿼리에 사용되는 절이다. 이 장 맨 마지막에 소개하는 이유는 GROUPING SETS 절이 그룹 쿼리이긴 하나 UNION ALL 개념이 섞여 있기 때문이다. 예를 들어, GROUPING SETS (expr1, expr2, expr3)를 GROUP BY 절에 명시했을 때, 괄호 안에 있는 세 표현식별로 각각 집계가 이루어진다. 즉 쿼리 결과는 ((GROUP BY expr1) UNION ALL (GROUP BY expr2) UNION ALL (GROUP BY expr3)) 형태가 된다.

    입력

        SELECT period, gubun, SUM(loan_jan_amt) totl_jan
          FROM kor_loan_status
         WHERE period LIKE '2013%'
         GROUP BY GROUPING SETS(period, gubun);
    

    결과

        PERIOD   GUBUN                TOTL_JAN
        -------- -------------------- -------------------------
        201310                        1087493.9
        201311                        1095358.2
                 기타대출             1357199.3
                 주택담보대출         825652.8
    

    위 쿼리는 GROPUPING SETS 절에 period, gubun을 명시해서 월별 합계, 대출 종류별 합계만 집계되어 조회되었다. 또 다른 예를 살펴 보자.

    입력

        SELECT period, gubun, region, SUM(loan_jan_amt) totl_jan
          FROM kor_loan_status
         WHERE period LIKE '2013%'
           AND region IN ('서울', '경기')
         GROUP BY GROUPING SETS(period, (gubun, region));
    

    결과

        PERIOD   GUBUN            REGION     TOTL_JAN
        -------- ---------------- ---------- ----------
                 기타대출         서울       410563.1
                 주택담보대출     서울       256484.5
                 주택담보대출     경기       218357.4
                 기타대출         경기       345934.5
        201310                               614460.4
        201311                               616879.1
    

    위 쿼리는 GROUPING SETS(period, (gubun, region))이라고 명시했는데 좀더 쉽게 풀어 쓰면, GROUP BY period UNION ALL GROUP BY (gubun, region)별로 집계가 되었다. 즉 월별 집계와(대출종류, 지역) 집계가 UNION ALL로 연결되어 결과가 조회된 것이다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.