출처 : 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;
'WEB TIP > Oracle' 카테고리의 다른 글
HINT 사용 (0) | 2008.12.17 |
---|---|
HINT 종류 (0) | 2008.09.24 |
Useful Oracle PL/SQLs (0) | 2007.12.24 |
테이블 스페이스 & 사용자 생성 (0) | 2007.12.18 |
날짜에 대한 해당월의 주차 구하기 (0) | 2006.09.08 |