더북(TheBook)

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로 연결되어 결과가 조회된 것이다.

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