◈ CUBE operator
※ CUBE강좌를 보시기 전에 바로 위에 있는 ROLLUP강좌를 꼭 봐주세요..
ROLLUP 강좌예제 중에서 아래 SQL문 예제를 가지고 CUBE강좌를 진행 하려고 합니다.
==================== ROLLUP 강좌의 예제입니다. =======================
SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(b.dname, a.job)
DNAME JOB SAL EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK 1300 1
ACCOUNTING MANAGER 2450 1
ACCOUNTING PRESIDENT 5000 1
ACCOUNTING 8750 3 --> ACCOUNTING 부서의 급여합계와 전체 사원수..
RESEARCH ANALYST 6000 2
RESEARCH CLERK 1900 2
RESEARCH MANAGER 2975 1
RESEARCH 10875 5 --> RESEARCH 부서의 급여합계와 전체 사원수..
SALES MANAGER 28500 1
SALES SALESMAN 4000 3
SALES 32500 4 --> SALES부서의 급여합계와 전체 사원수..
52125 12 -> 전체 급여 합계와 전체 사원수
=========================================================================
위의 SQL의 결과를 보면 부서별로 각 직업에 해당하는 급여와 사원수를 볼 수 있습니다.
하지만 부서별로 각 직업의 급여와 사원수, 그리고 또 각 직업별로 급여 합계와 사원수를
보기 위해서는 두개의 ROLLUP을 사용해서 SQL문을 작성해야 합니다.
아래와 같이 되겠죠..
SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(b.dname, a.job)
UNION
SELECT ’ ’, job, SUM(sal) sal, COUNT(empno) emp_count
FROM emp
GROUP BY ROLLUP(job)
DNAME JOB SAL EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK 1300 1
ACCOUNTING MANAGER 2450 1
ACCOUNTING PRESIDENT 5000 1
ACCOUNTING 8750 3
RESEARCH ANALYST 6000 2
RESEARCH CLERK 1900 2
RESEARCH MANAGER 2975 1
RESEARCH 10875 5
SALES MANAGER 28500 1
SALES SALESMAN 4000 3
SALES 32500 4 => 요기 까지는 첫 번째 ROLLUP를 이용해서 구하고요
ANALYST 6000 2
CLERK 3200 3
MANAGER 33925 3
PRESIDENT 5000 1
SALESMAN 4000 3
52125 12 => 요 부분은 두 번째 ROLLUP을 이용해서 구했습니다.
CUBE Operator를 사용하면 편하게 하나의 SQL문으로 위의 결과를 얻을 수 있습니다.
직접 SQL문을 실행시켜 보면 쉽게 이해가 갑니다.
SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY CUBE(b.dname, a.job)
DNAME JOB SAL EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK 1300 1
ACCOUNTING MANAGER 2450 1
ACCOUNTING PRESIDENT 5000 1
ACCOUNTING 8750 3 =>ACCOUNTING 부서의 직업별 급여의 총계와 사원수.
RESEARCH ANALYST 6000 2
RESEARCH CLERK 1900 2
RESEARCH MANAGER 2975 1
RESEARCH 10875 5=>RESEARCH 부서의 직업별 급여의 총계와 사원수.
SALES MANAGER 28500 1
SALES SALESMAN 4000 3
SALES 32500 4=>SALES 부서의 직업별 급여 총계와 사원수.
ANALYST 6000 2
CLERK 3200 3
MANAGER 33925 3
PRESIDENT 5000 1
SALESMAN 4000 3
52125 12 => 직업별로 급여의 총계와 사원수를 보여줍니다.
CUBE를 어느 경우에 사용 할 수 있는지 이해 되셨죠..
CUBE Operator는 Cross-Tab에 대한 Summary를 추출하는데 사용 됩니다
즉 ROLLUP에 의해 나타내어지는 Item Total값과 Column Total값을 나타 낼 수 있습니다.
너무 어렵게 설명했나요... 응용해서 테스트 해보세요..
|