WEB TIP/Oracle

부서별 랭킹 쉽게 구하기

제프 2008. 9. 24. 18:56

출처 : 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;