실전오라클, 튜닝, 모델링, SQL, PLSQL
인기강좌 --> SQL초보에서전문가까지, 오라클초보에서전문가까지, Unix&Pro*C
www.oraclejava3.co.kr 오라클 강좌에서 확인하세요.
ORACLE 9i 부터는 일정 칼럼의 값을 SUM (총계) 하고 그에따른 조건에 SUM의 합을 구할 수 있는 함수 가 있습니다..
바로 ROLLUP 함수 인데... 사용하는 방법은 의외로 간단 합니다..
예를 들어 부서별 로 정리해놓은 TABLE이 SHIN_JOBS 라고 가정 했을시
SELECT * FROM SHIN_JOBS
DEPT NAME NICKNAME EMPNUM SALES
DA KIM HISEOUL008 B102 370
DA KIM ANGEL0007 A101 300
DP LEE ONJ4760 A101 400
DP SHIN CAPTAIN5030 C103 200
DP YEO DARLING C103 300
DC LEE HAPPY1010 B102 230
DC KIM HISEOUL008 B102 370
그럼 부서별 SALES의 합은 ??
SELECT DEPT,SUM(SALES) FROM SHIN_JOBS
GROUP BY DEPT
DEPT SUM(SALES)
---- ---------
DA 670
DP 900
DC 600
당연히 이런 결과 가 나오겠죠??
그럼 그에 따른총계는 어떻게 구할까??
이럴때 사용 하는 것이 GROUP 함수인데 의외로 간단 해요...
SELECT DEPT,SUM(SALES) FROM SHIN_JOBS
GROUP BY ROLLUP(DEPT) --- ROLLUP 함수 이용
DEPT SUM(SALES)
DA 670
DC 600
DP 900
2170 --- 총계
간단하죠^^ 그에 보너스~~
그럼 부서별,사본별 SALES의 합은 ??
SELECT DEPT,EMPNUM,SUM(SALES) FROM SHIN_JOBS
GROUP BY ROLLUP(DEPT,EMPNUM)
DEPT EMPNUM SUM(SALES)
DA A101 300
DA B102 370
DA 670
DC B102 600
DC 600
DP A101 400
DP C103 500
DP 900
2170
각 부서별 사번별 구분하여 SALES 의 합을 도출 할 수 있죠~~
그에 또 보너스~~
SELECT DEPT,EMPNUM,GROUPING_ID(DEPT,EMPNUM),SUM(SALES) FROM SHIN_JOBS
GROUP BY ROLLUP(DEPT,EMPNUM)
DEPT EMPNUM GROUPING_ID(DEPT,EMPNUM) SUM(SALES)
DA A101 0 300
DA B102 0 370
DA 1 670
DC B102 0 600
DC 1 600
DP A101 0 400
DP C103 0 500
DP 1 900
3 2170
결과를 보면 DEPT 별 EMPNUM 별 합계 가 GROUPING_ID='1' 로 나오고 총계 가 3으로 해서 나오는 결과를 알수 있죠...GROUPING_ID 함수 하나로 계산 없이 소계 및 총계를 계산할 수 있네요..
이렇듯 GROUPING 함수를 유용하게 사용하면 SUMMERY 하여 이용하는 TABLE을 사용할때 매우 유용하겠죠...