본문 바로가기

04번. IT 힌트얻기/▶ DB/ SQL

ROLL UP


출처 : 오라클클럽 (http://www.oracleclub.com/lecture/1845)
간단 예제
 
-- 먼저 GROUP BY를 사용해서 직업별로 급여 합계를 구하는 예제이다.
SQL> SELECT job, SUM(sal)
     FROM emp
     GROUP BY job; 

JOB          SUM(SAL)
---------- ----------
ANALYST         600
CLERK          3200
MANAGER       33925
PRESIDENT      5000
SALESMAN       4000


-- ROLLUP을 사용해서 직업별로 급여 합계와  총계를 구하는 예제이다.
SQL> SELECT job, SUM(sal)
     FROM emp
     GROUP BY ROLLUP(job);
 

JOB          SUM(SAL
---------- ----------
ANALYST         6000
CLERK           3200
MANAGER        33925
PRESIDENT       5000
SALESMAN        4000
               52125   --> 급여 합계에 대한 총계가 추가 되었다.
    

좀 더 복잡한 예제

부서별로 인원수와 급여 합계를 구하는 예제

 
-- GROUP BY절을 사용 한 결과
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 b.dname, a.job

DNAME       JOB               SAL  EMP_COUNT
----------  ---------- ---------- ----------
ACCOUNTING  CLERK            1300          1
ACCOUNTING  MANAGER          2450          1
ACCOUNTING  PRESIDENT        5000          1
RESEARCH    ANALYST          6000          2
RESEARCH    CLERK            1900          2
RESEARCH    MANAGER          2975          1
SALES       MANAGER         28500          1
SALES       SALESMAN         4000          3


-- 부서별로 인원과, 급여합계가 한 눈에 보이지 않는다.
-- 일일이 부서에 해당하는 직업별 급여와 사원수를 일일이 더해야 한다.

-- 이런 경우 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 ->  전체 급여 합계와 전체 사원 수
 

-- 위와 같이ROLLUP은 일반적인 누적에 대한 총계를 구할 때 아주 편리하게 사용 할 수 있다.


'04번. IT 힌트얻기 > ▶ DB/ SQL ' 카테고리의 다른 글

트리거(TRIGGER) 이해하기  (0) 2011.11.08
Oracle Function  (0) 2011.11.08
OUTER JOIN  (0) 2011.10.07
[SQL 고수되기] 열한번째 이야기  (0) 2011.10.06
[SQL 고수되기] 열번째 이야기  (0) 2011.10.06