Notice
Recent Posts
Recent Comments
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

Without haste, but without rest

6.4. CUBE 본문

삽질의 리포팅

6.4. CUBE

느린구름 2011. 8. 12. 18:07

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 함수는 해당 RowGROUP 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