Oracle/SQL2009. 12. 14. 12:02
rollup 
  : 컬럼 갯수가 n개  =>  결과 집합 갯수가 n+1개
    컬럼의 나열 순서가 중요 (결과에 차이가 있으므로)
    8i부터 사용가능
    아래의 예는 3가지 (deptno, job), (deptno), () 아래의 grouping sets와 같다.

SQL> select deptno, job, sum(sal)
         from emp
         group by rollup(deptno, job);


SQL> select deptno, job, sum(sal)
         from t1
         group by grouping sets ((deptno, job),(dept),());


cube
 : 컬럼 갯수가 n개 => 결과 집합 갯수 2^n개
   8i부터 사용가능
   위의 예와 아래의 예는 같은 결과를 나타냄

SQL> select deptno, job, sum(sal)
         from emp
         group by cube (deptno, job);

SQL> select deptno, job, sum(sal)
         from emp
         group by grouping sets ((deptno, job),(deptno),(job),());


cf) grouping 함수
     : 0과 1의 값만 반환하는 함수로 rollup과 cube와 같이 사용함.
       특정 컬럼을 이용한 그룹핑 결과인지 판단할 때 쓰인다.
       0일 경우 그 컬럼의 그룹핑 결과, 1일 경우 그룹핑 결과가 아님..
 

SQL>select *
        from (select deptno, job, sum(sal) as sum_sal, grouping(deptno), grouping (job)
                from t1
        group by rollup(deptno, job));


grouping sets
 : 지정한 컬럼으로 그룹을 짓는 함수. 원하는 그룹핑 결과만 도출할 수 있다.
   rollup과 cube의 단점을 보완하기 위해서 9i부터 나온 기술
   사용예는 위의 rollup과 cube의 예제를 참고할 것.


기타 참고사항

- rollup과 cube의 단점
   : 너무 많은 결과를 나오게 한다.

- excel과 비교시 dbms의 장점과 단점
   장점 : 여러 사람이 사용할 수 있도록 제공
            복원과 복구가 쉬움.
   단점 : 사용하기 어려움으로 교육이 필요. 
            통합 관리로 중앙 부분에 문제가 생기면 전체적으로 사용이 불가능

'Oracle > SQL' 카테고리의 다른 글

Correlated Sub Query(상호관련 서브 쿼리)  (1) 2009.12.15
timezone  (0) 2009.12.15
multi table insert  (0) 2009.12.14
index를 사용하여 쿼리를 튜닝해보자  (0) 2009.11.16
WITH .. AS  (0) 2009.11.15
Posted by 자수성가한 부자