---- rollup, cube 함수
select deptno, job, sum(sal)
from emp
group by deptno, job;  -- group by 1차,2차

select deptno, sum(sal)
from EMP
group by rollup(deptno); -- rollup() : 요약값, 그룹지어진것의 합을 구한다.

select deptno, job, sum(sal)
from emp
group by rollup(deptno, job); -- 직종에 상관없이 부서별 합계가 나오고, 부서번호&직종에 상관없이 전체합이 나온다.

select deptno, sum(sal)
from EMP
group by cube(deptno);

select deptno, job, sum(sal)
from emp                     -- cube() : rollup과 동일하나 추가로 2차 컬럼의 종류별 합계도 나온다.
group by cube(deptno, job);  --          cube는 2차그룹이 있을때 더 효율적이다.
/* sys로 접속해서 실행 */
--////// rollup을 사용할때 그룹할 column에 null이 존재하면 결과값중에 실값과 요약값이 구분하기 힘들다.
--////// 이럴때 grouping 을 쓰면 구분하기가 좋다.
--////// grouping의 값이 0이면 실값이고, 1이면 요약값이다.
select department_id, grouping(department_id), sum(salary)
from hr.employees
group by rollup(department_id);

select case grouping(department_id)
      when 1 then '전체부서'  -- 해당 컬럼데이터가 숫자이면 숫자만 가능하나 문자로 입력하려면
      else to_char(department_id) -- 해당컬럼값을 문자로 바꾸면 문자 출력이 가능하다.
    end as "부서번호",
    sum(salary) as "급여합"
from hr.employees
group by rollup(department_id);

'Program... > Oracle' 카테고리의 다른 글

Oracle 다중 테이블로부터의 데이타 검색  (0) 2009.03.14
Oracle All 함수  (0) 2009.03.14
Oracle Having 절  (0) 2009.03.14
Oracle Group by 절  (0) 2009.03.14
Oracle 단일행 함수와 그룹함수의 차이점  (0) 2009.03.14
Posted by Duritz

공지사항

Yesterday
Today
Total
12-05 02:20

달력

 « |  » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31