오라클 그룹 함수 정리...
with문을 이용하여 테스트...
with emp as (
select '7782' EMPNO, 'CLARK' ENAME , 2450 SAL ,'10' DEPTNO from dual union all
select '7839', 'KING' , 5000 ,'10' from dual union all
select '7934', 'MILLER' , 1300 ,'10' from dual union all
select '7566', 'JONES' , 2975 ,'20' from dual union all
select '7902', 'FORD' , 3000 ,'20' from dual union all
select '7876', 'ADAMS' , 1100 ,'20' from dual union all
select '7369', 'SMITH' , 800 ,'20' from dual union all
select '7788', 'SCOTT' , 3000 ,'20' from dual union all
select '7521', 'WARD' , 1250 ,'30' from dual union all
select '7844', 'TURNER' , 1500 ,'30' from dual union all
select '7499', 'ALLEN' , 1600 ,'30' from dual union all
select '7900', 'JAMES' , 950 ,'30' from dual union all
select '7698', 'BLAKE' , 2850 ,'30' from dual union all
select '7654', 'MARTIN' , 1250 ,'30' from dual
)
전체 평균을 각 행에 붙일때...
over(조건)는 그룹을 묶는다... 조건이 없으면 전체가 묶인다.
select empno, ename, sal,
avg(sal) over( ) avg_sal
from emp;
결과
empno ename sal avg_sal
7782 CLARK 2450.00000 2073.21429
7839 KING 5000.00000 2073.21429
7934 MILLER 1300.00000 2073.21429
:
:
7900 JAMES 950.00000 2073.21429
7698 BLAKE 2850.00000 2073.21429
7654 MARTIN 1250.00000 2073.21429
부서별 평균을 구할때..
over(조건) 조건에 따라서 그룹을 묶는다..
partiton by deptno -> 부서에 따라 그룹을 묶는거다.
select empno, ename, sal, deptno
, avg(sal) over(PARTITION BY deptno) avg_sal
from emp ;
결과
7934 MILLER 1300.00000 10 2916.66667
7839 KING 5000.00000 10 2916.66667
7782 CLARK 2450.00000 10 2916.66667
7876 ADAMS 1100.00000 20 2175.00000
:
:
7900 JAMES 950.00000 30 1566.66667
7698 BLAKE 2850.00000 30 1566.66667
7654 MARTIN 1250.00000 30 1566.66667
가벼운 응용
최소, 최대 연봉자 구하기
select *
from (
select empno, ename, sal, deptno
, count(*) over(PARTITION BY null) cnt
, rank() over(order BY sal DESC) col_rank
from emp
)
where col_rank = 1 --최고연봉자
or ( cnt = col_rank ) --최저연봉자
결과
7369 SMITH 800.00000 20 14.00000 1.00000
7839 KING 5000.00000 10 14.00000 14.00000
'sql' 카테고리의 다른 글
오라클 TRUNC 함수.. (0) | 2014.03.17 |
---|---|
oracle 분석함수 RANK, DENSE_RANK, ROW_NUMBER 차이.. (0) | 2014.03.17 |
Join 유형 (0) | 2014.03.07 |
row의 최소값, 최대값을 구하는 함수 GREATEST, LEAST (0) | 2014.03.07 |
Full outer join 다중조인해보기.. (0) | 2014.03.06 |