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

(job)

 

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

 

================================================

    * 데이터베이스 정보공유 커뮤니티 oracleclub.com

    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)

  ================================================ 

oracleclub 강좌를 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^ 

oracleclub 강좌는 개인의 학습용으로만 사용 할 수 있습니다. 학원 홍보용이나 수익을 얻기 위한 용도로

    사용을 하시면 안됩니다. ^^



[출처] http://www.oracleclub.com/lecture/1845

'프로그램 > DB' 카테고리의 다른 글

집합 쿼리(UNION, INTERSECT, MINUS)  (0) 2009.04.01
[오라클] - SIGN()함수  (0) 2009.04.01
[펌] - Group By절과 Having절  (0) 2009.03.27
단일 테이블에 다중 행 입력 방법  (0) 2009.03.16
오라클 시퀀스 생성하기  (0) 2009.03.16

+ Recent posts