ROLLUP의 실전예제 2

[원문 작성자: Mooyoung2020]

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