ROLLUP의 실전예제 2

Updated:

ROLLUP의 실전예제2

실전 예제1에 이어서 두번째 실전예제를 아래와 같이 설명합니다. 실전예제 1번 칼럼에서 실전예제 테이블 생성 스크립트를 이용하여 테이블을 생성한후 실전예제 1번부터 차근차근 테스트해봅니다

라. 지사별 기준으로 SUB/ALL TOAL 보여주기

실전예제 1의 의 포스팅과 이어서 봐주기 바랍니다. 실전예제 1의 “다” 항과 동일한 개념이나 총합계를 하나 더 구해주는 조건입니다. group by절의 rollup에서 제외가 된 2개의 칼럼을 ( ) 로 하나로 묶어 rollup절 안으로 넣어준다. 즉 2차원 rollup 형태로 만드므로 sub/all 합계가 생성됩니다.

SELECT gubun, area_nm, dept_nm, kun_no, corp_nm, sum(sal)
FROM roll
GROUP BY ROLLUP ((gubun, area_nm), (dept_nm, kun_no, corp_nm))
ORDER BY 1, 2, 3;
GUBUN AREA_NM DEPT_NM KUN_NO CORP_NM SUM(SAL)
구품관리 수도권 경기지사 1군 다온네트웍 800000
구품관리 수도권 경기지사 1군 다온네트웍 800000
구품관리 수도권 경기지사 2군 다온네트웍 900000
구품관리 수도권 경기지사 1군 이온네트웍 600000
구품관리 수도권 경기지사 2군 정말네트웍 600000
구품관리 수도권 경기지사 2군 이온네트웍 100000
구품관리 수도권 수도지사 1군 정말네트웍 500000
구품관리 수도권 수도지사 2군 정말네트웍 300000
구품관리 수도권 수도지사 2군 다온네트웍 1000000
구품관리 수도권 수도지사 1군 다온네트웍 1100000
구품관리 수도권       5900000
구품관리 영남권 부산지사 1군 다온네트웍 1100000
구품관리 영남권 부산지사 2군 다온네트웍 1000000
구품관리 영남권 부산지사 2군 정말네트웍 700000
구품관리 영남권 부산지사 1군 정말네트웍 1400000
구품관리 영남권       4200000
신품관리 수도권 경기지사 1군 정말네트웍 700000
신품관리 수도권       700000
신품관리 충남권 충청지사 1군 다온네트웍 800000
신품관리 충남권 충청지사 2군 다온네트웍 900000
신품관리 충남권 충청지사 1군 이온네트웍 1900000
신품관리 충남권 충청지사 2군 정말네트웍 100000
신품관리 충남권 충청지사 2군 이온네트웍 900000
신품관리 충남권       4600000
          15400000

마. DEPT_NM, CORP_NM, KUN_NO을 기준으로 SUB/ALL TOAL 을 전부 보여주기

이번에는 gubun, area_nm 를 기준으로 그안에 있는 SUB/ALL 합계를 전부 보여주는 조건입니다. Composite 처리된 rollup안의 값을 ( ) 를 제거하고 조회합니다.

SELECT gubun, area_nm, dept_nm, kun_no, corp_nm, sum(sal)
FROM roll
GROUP BY gubun, area_nm, ROLLUP(dept_nm, corp_nm, kun_no)
ORDER BY 1, 2, 3;
GUBUN AREA_NM DEPT_NM KUN_NO CORP_NM SUM(SAL)
구품관리 수도권 경기지사 1군 다온네트웍 800000
구품관리 수도권 경기지사 2군 다온네트웍 900000
구품관리 수도권 경기지사   다온네트웍 1700000
구품관리 수도권 경기지사 1군 이온네트웍 600000
구품관리 수도권 경기지사 2군 이온네트웍 100000
구품관리 수도권 경기지사   이온네트웍 700000
구품관리 수도권 경기지사 2군 정말네트웍 600000
구품관리 수도권 경기지사   정말네트웍 600000
구품관리 수도권 경기지사     3000000
구품관리 수도권 수도지사 1군 다온네트웍 1100000
구품관리 수도권 수도지사 2군 다온네트웍 1000000
구품관리 수도권 수도지사   다온네트웍 2100000
구품관리 수도권 수도지사 1군 정말네트웍 500000  
구품관리 수도권 수도지사 2군 정말네트웍 300000
구품관리 수도권 수도지사   정말네트웍 800000
구품관리 수도권 수도지사     2900000
구품관리 수도권       5900000
신품관리 충남권 충청지사   다온네트웍 1700000
신품관리 충남권 충청지사 1군 이온네트웍 1900000
신품관리 충남권 충청지사 2군 이온네트웍 900000
신품관리 충남권 충청지사   이온네트웍 2800000
신품관리 충남권 충청지사 2군 정말네트웍 100000
신품관리 충남권 충청지사   정말네트웍 100000
신품관리 충남권 충청지사     4600000
신품관리 충남권       4600000

바. 5개의 칼럼을 기준으로 5차원 rollup 전부 보여주기

SELECT gubun, area_nm, dept_nm, kun_no, corp_nm, sum(sal)
FROM roll
GROUP BY ROLLUP(gubun, area_nm, dept_nm, kun_no, corp_nm)
ORDER BY 1, 2, 3;
GUBUN AREA_NM DEPT_NM KUN_NO CORP_NM SUM(SAL)
구품관리 수도권 경기지사 1군 다온네트웍 800000
구품관리 수도권 경기지사 1군 이온네트웍 600000
구품관리 수도권 경기지사 1군   1400000
구품관리 수도권 경기지사 2군 다온네트웍 900000
구품관리 수도권 경기지사 2군 이온네트웍 100000
구품관리 수도권 경기지사 2군 정말네트웍 600000
구품관리 수도권 경기지사 2군   1600000
구품관리 수도권 경기지사     3000000
구품관리 수도권 수도지사 1군 다온네트웍 1100000
구품관리 수도권 수도지사 1군 정말네트웍 500000
구품관리 수도권 수도지사 1군   1600000
구품관리 수도권 수도지사 2군 다온네트웍 1000000
구품관리 수도권 수도지사 2군 정말네트웍 300000
구품관리 수도권 수도지사 2군   1300000
구품관리 수도권 수도지사     2900000
구품관리 수도권       5900000
구품관리 영남권 부산지사 1군 다온네트웍 1100000
구품관리 영남권 부산지사 1군 정말네트웍 1400000
구품관리 영남권 부산지사 1군   2500000
구품관리 영남권 부산지사 2군 다온네트웍 1000000
구품관리 영남권 부산지사 2군 정말네트웍 700000
구품관리 영남권 부산지사 2군   1700000
구품관리 영남권 부산지사     4200000
구품관리 영남권       4200000
구품관리         10100000
신품관리 수도권 경기지사 1군 정말네트웍 700000
신품관리 수도권 경기지사 1군   700000
신품관리 수도권 경기지사     700000
신품관리 수도권       700000
신품관리 충남권 충청지사 1군 다온네트웍 800000
신품관리 충남권 충청지사 1군 이온네트웍 1900000
신품관리 충남권 충청지사 1군   2700000
신품관리 충남권 충청지사 2군 다온네트웍 900000
신품관리 충남권 충청지사 2군 이온네트웍 900000
신품관리 충남권 충청지사 2군 정말네트웍 100000
신품관리 충남권 충청지사 2군   1900000
신품관리 충남권 충청지사     4600000
신품관리 충남권       4600000
신품관리         5300000
          15400000

사. Grouping Sets와 Rollup의 혼용문제

Grouping sets함수와 rollup을 동시에 사용하여 원하는 대로 데이터를 조회할수 있다. 여기에서 grouping sets함수안에 rollup이 들어가서 사용될수 있으나 rollup 안에 Grouping sets함수가 들어갈수 없음을 주의합니다.
아래의 sql과 같이 grouping sets와 rollup을 동시에 사용한 기술을 Concatenated groupings 라고 부르며, rollup안의 칼럼대로 sub/all total을 구하고, (corp_nm) 칼럼을 기준으로 sub total을 한번 더 구해주는것입니다.

SELECT gubun, area_nm, dept_nm, corp_nm, sum(sal)
FROM roll
GROUP BY grouping sets(ROLLUP(gubun, area_nm, dept_nm, corp_nm),(corp_nm))
ORDER BY 1,2,3,4;
GUBUN AREA_NM DEPT_NM CORP_NM SUM(SAL)
구품관리 수도권 경기지사 다온네트웍 1700000
구품관리 수도권 경기지사 이온네트웍 700000
구품관리 수도권 경기지사 정말네트웍 600000
구품관리 수도권 경기지사   3000000
구품관리 수도권 수도지사 다온네트웍 2100000
구품관리 수도권 수도지사 정말네트웍 800000
구품관리 수도권 수도지사   2900000
구품관리 수도권     5900000
구품관리 영남권 부산지사 다온네트웍 2100000
구품관리 영남권 부산지사 정말네트웍 2100000
구품관리 영남권 부산지사   4200000
구품관리 영남권     4200000
구품관리       10100000
신품관리 수도권 경기지사 정말네트웍 700000
신품관리 수도권 경기지사   700000
신품관리 수도권     700000
신품관리 충남권 충청지사 다온네트웍 1700000
신품관리 충남권 충청지사 이온네트웍 2800000
신품관리 충남권 충청지사 정말네트웍 100000
신품관리 충남권 충청지사   4600000
신품관리 충남권     4600000
신품관리       5300000
      다온네트웍 7600000
      이온네트웍 3500000
      정말네트웍 4300000
        15400000
SELECT gubun, area_nm, dept_nm, corp_nm, sum(sal) 
 FROM roll
GROUP BY grouping sets(ROLLUP(gubun, area_nm, dept_nm, corp_nm),(dept_nm))
ORDER BY 1,2,3,4;
GUBUN AREA_NM DEPT_NM CORP_NM SUM(SAL)
구품관리 수도권 경기지사 다온네트웍 1700000
구품관리 수도권 경기지사 이온네트웍 700000
구품관리 수도권 경기지사 정말네트웍 600000
구품관리 수도권 경기지사   3000000
구품관리 수도권 수도지사 다온네트웍 2100000
구품관리 수도권 수도지사 정말네트웍 800000
구품관리 수도권 수도지사   2900000
구품관리 수도권     5900000
구품관리 영남권 부산지사 다온네트웍 2100000
구품관리 영남권 부산지사 정말네트웍 2100000
구품관리 영남권 부산지사   4200000
구품관리 영남권     4200000
구품관리       10100000
신품관리 수도권 경기지사 정말네트웍 700000
신품관리 수도권 경기지사   700000
신품관리 수도권     700000
신품관리 충남권 충청지사 다온네트웍 1700000
신품관리 충남권 충청지사 이온네트웍 2800000
신품관리 충남권 충청지사 정말네트웍 100000
신품관리 충남권 충청지사   4600000
신품관리 충남권     4600000
신품관리       5300000
    경기지사   3700000
    부산지사   4200000
    수도지사   2900000
    충청지사   4600000
        15400000
SELECT gubun, area_nm, dept_nm, corp_nm, sum(sal)  
FROM roll
GROUP BY grouping sets(ROLLUP(gubun, area_nm, dept_nm, corp_nm),(area_nm))
ORDER BY 1,2,3,4;
GUBUN AREA_NM DEPT_NM CORP_NM SUM(SAL)
구품관리 수도권 경기지사 다온네트웍 1700000
구품관리 수도권 경기지사 이온네트웍 700000
구품관리 수도권 경기지사 정말네트웍 600000
구품관리 수도권 경기지사   3000000
구품관리 수도권 수도지사 다온네트웍 2100000
구품관리 수도권 수도지사 정말네트웍 800000
구품관리 수도권 수도지사   2900000
구품관리 수도권     5900000
구품관리 영남권 부산지사 다온네트웍 2100000
구품관리 영남권 부산지사 정말네트웍 2100000
구품관리 영남권 부산지사   4200000
구품관리 영남권     4200000
구품관리       10100000
신품관리 수도권 경기지사 정말네트웍 700000
신품관리 수도권 경기지사   700000
신품관리 수도권     700000
신품관리 충남권 충청지사 다온네트웍 1700000
신품관리 충남권 충청지사 이온네트웍 2800000
신품관리 충남권 충청지사 정말네트웍 100000
신품관리 충남권 충청지사   4600000
신품관리 충남권     4600000
신품관리       5300000
  수도권     6600000
  영남권     4200000
  충남권     4600000
        15400000

이제까지 이야기한 ROLLUP의 기본형태를 응용하여 같이 사용해봅니다.
아래의 SQL이 이해가 되는가요? composite column형태로 (area_nm, dept_nm, corp_nm)을 묶어 2차원의 rollup을 구하고 있다. 그러므로 2개의 서브/all total이 구해지고 grouping sets 함수안에 corp_nm 칼럼을 하나 더 넣어 corp_nm 칼럼 기준으로 sub total을 조회합니다.

SELECT gubun, area_nm, dept_nm, corp_nm, sum(sal)
FROM roll
GROUP BY  grouping sets(ROLLUP(gubun,( area_nm, dept_nm, corp_nm)),(corp_nm))
ORDER BY 1,2,3,4;
GUBUN AREA_NM DEPT_NM CORP_NM SUM(SAL)
구품관리 수도권 경기지사 다온네트웍 1700000
구품관리 수도권 경기지사 이온네트웍 700000
구품관리 수도권 경기지사 정말네트웍 600000
구품관리 수도권 수도지사 다온네트웍 2100000
구품관리 수도권 수도지사 정말네트웍 800000
구품관리 영남권 부산지사 다온네트웍 2100000
구품관리 영남권 부산지사 정말네트웍 2100000
구품관리       10100000
신품관리 수도권 경기지사 정말네트웍 700000
신품관리 충남권 충청지사 다온네트웍 1700000
신품관리 충남권 충청지사 이온네트웍 2800000
신품관리 충남권 충청지사 정말네트웍 100000
신품관리       5300000
      다온네트웍 7600000
      이온네트웍 3500000
      정말네트웍 4300000
        15400000