CUBE operator
CUBE 강좌를 보기 전에 바로 전에 있는 ROLLUP 강좌를 꼭 보기 바란다.
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); 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문을 작성해야 한다.
-- 이렇게 하면 되겠죠.. 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를 사용하면 편하게 하나의 SQL문으로 위의 결과를 얻을 수 있다. 직접 아래 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는 Cross-Tab에 대한 Summary를 추출하는데 사용 된다 -- 즉 ROLLUP에 의해 나타 내어지는 Item Total값과 Column Total값을 나타 낼 수 있다.