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