Without haste, but without rest
6.4. CUBE 본문
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> 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값을 나타 낼 수 있다.
GROUPING() 함수
- GROUPING 함수는 ROLLUP, CUBE에 모두 사용할 수 있다.
- GROUPING 함수는 해당 Row가 GROUP BY에 의해서 산출된 Row인 경우에는 0을 반환하고,
- ROLLUP이나 CUBE에 의해서 산출된 Row인 경우에는 1을 반환하게 된다.
따라서 해당 Row가 결과집합에 의해 산출된 Data 인지, ROLLUP이나 CUBE에 의해서 산출된 Data 인지를 알 수 있도록 지원하는 함수이다.
SQL> SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count,
GROUPING(b.dname) "D", GROUPING(a.job) "S"
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY CUBE(b.dname, a.job)
DNAME JOB SAL EMP_COUNT D S
---------- ---------- ------- --------- ---- ----
ACCOUNTING CLERK 1300 1 0 0
ACCOUNTING MANAGER 2450 1 0 0
ACCOUNTING PRESIDENT 5000 1 0 0
ACCOUNTING 8750 3 0 1
RESEARCH ANALYST 6000 2 0 0
RESEARCH CLERK 1900 2 0 0
RESEARCH MANAGER 2975 1 0 0
RESEARCH 10875 5 0 1
SALES MANAGER 28500 1 0 0
SALES SALESMAN 4000 3 0 0
SALES 32500 4 0 1
ANALYST 6000 2 1 0
CLERK 3200 3 1 0
MANAGER 33925 3 1 0
PRESIDENT 5000 1 1 0
SALESMAN 4000 3 1 0
52125 12 1 1