Where The Streets Have No Name

ROLLUP operator 본문

Developement/DataBase

ROLLUP operator

highheat 2006. 4. 13. 11:11
www.oracleclub.com


ROLLUP operator


- ROLLUP구문은 GROUP BY절과 같이 사용 되며, GROUP BY절에 의해서 그룹 지어진
  집합결과에 대해서 좀 더 상세한 정보를 반환하는 기능을 수행합니다.

- SELECT절에 ROLLUP을 사용함으로써 보통의 select된 데이터와 그 데이터의
  총계를 구할 수 있습니다.


※ 우선 아주 간단한 예제부터 살펴 보겠습니다.
 (scott유저의 emp테이블을 가지고 테스트 했습니다.)


-- Group By를 사용해서 직업별로 급여 합계를 구하는 예제 입니다.

SELECT job, SUM(sal)
FROM emp
GROUP BY job


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



-- 아래 SQL문은 위의 예제에 ROLLUP구문을 사용해서 직업별로 급여 합계를 구하고
 총계를 구하는 예제 입니다.


SELECT job, SUM(sal)
FROM emp
GROUP BY ROLLUP(job)


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




우선 간단하게 ROLLUP  Operator의 예제를 살펴보았습니다.
조금더 복잡한(?) 예제를 하나더 해보면은요..

-- 부서의 직업별로 인원수와 급여 합계를 구하는 예제를 하나더 해보겠습니다.

-- 일반적인 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  Operator를 적용해서 구현을 하면은 부서별 급여합계와 사원 총수를
 쉽게 볼 수 있습니다...

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 Operator을 일반적인 누적에 대한 총계를 구할때 사용하면 아주 편리하게
사용 할 수 있습니다.


http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=83&page=1&position=1