Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ultimate-member domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /ledcorps/www/wp/wp-includes/functions.php on line 6114 2.4 Cube – 대나무숲

2.4 Cube

출처 http://www.gurubee.net/lecture/1846

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값을 나타 낼 수 있다.    
    

참고링크

SQL 전문가 가이드 – 제5절 그룹 함수(GROUP FUNCTION)


답글 남기기 0

Your email address will not be published. Required fields are marked *