부서별 랭킹 쉽게 구하기
출처 : DBguide(hikim)님
EMP table을 이용하여, 직원들의 부서별 급여 순위를 보는 SQL 만들기....
결과.
EMPNO ENAME SAL DEPTNO RANK_DEPT
---------- ---------- ---------- ---------- ----------
7839 KING 5000 10 1 --> 10번 부서의 1등
7782 CLARK 2450 10 2
7934 MILLER 1300 10 3
7788 SCOTT 3000 20 1 --> 20번 부서의 1등
7902 FORD 3000 20 2
7566 JONES 2975 20 3
7876 ADAMS 1100 20 4
7369 SMITH 800 20 5
7698 BLAKE 2850 30 1
7499 ALLEN 1600 30 2
7844 TURNER 1500 30 3
7521 WARD 1250 30 4
7654 MARTIN 1250 30 5
7900 JAMES 950 30 6
초짜.---> 생각.......중.......
중짜 ---> 음... rownum을 이용하여... grouping하여... 음.. 어렵군..
고수
-- row_number()라는 analytic function을 이용한다.
-- over () 의 ()안에 order by는 순서를 정하는 기준이 되고, partition은 구분을
-- 나타냄.. 아래의 예는 즉, sal 순서로 하는데, deptno로 나누어 순서를 정함.
select empno, ename, sal,
row_number() over ( partition by deptno order by sal desc) as rank_dept
from emp;