/*
순위와 관련된 오라클 함수
RANK()
ROW_NUMBER()
DENSE_RANK()
RANK 함수가 동일한 값에 대해서는 동일한 순위를 부여하는데 반해,
ROW_NUMBER 함수는 유니크한 순위를 부여한다.
DENSE_RANK()함수는 중복 RANK의 수와 무관하게 순위를 부여한다.
oracle 8i(8.1.6)이상
plsql내에서는 oracle 9i이상
*/
-- RANK() 함수를 사용하여 급여순으로 순위 부여
SELECT empno, ename, sal, RANK () OVER (ORDER BY sal DESC) AS RANK
FROM emp
-- PARTITION BY를 이용해서 그룹별로 순위 부여
SELECT deptno, ename, sal,
RANK () OVER (PARTITION BY deptno ORDER BY sal DESC) AS RANK
FROM emp
-- 중복값과 무관하게 순위부여
SELECT empno, ename, sal, DENSE_RANK () OVER (ORDER BY sal DESC) AS RANK
FROM emp
-- ROW_NUMBER()를 사용하여 유니크한 순서부여, 순위를 자세히 조정하고 싶으면 ORDER BY절 수정
SELECT empno, ename, sal,
ROW_NUMBER () OVER (ORDER BY sal DESC, ename) AS ROW_NUMBER
FROM emp
-- 다음 두 쿼리는 같은 결과를 반환, 직업별로 가장높은 월급을 받는사람
SELECT a.ename, a.job, a.sal
FROM emp a,
(SELECT MAX (sal) max_sal, job
FROM emp
GROUP BY job) b
WHERE a.sal = b.max_sal AND a.job = b.job
ORDER BY a.ename
SELECT ename, job, sal
FROM (SELECT ename, job, sal,
RANK () OVER (PARTITION BY job ORDER BY sal DESC) AS RANK
FROM emp)
WHERE RANK = 1
ORDER BY ename
'database' 카테고리의 다른 글
오라클 테이블정보 쿼리 (0) | 2006.12.06 |
---|---|
SQL%ROWCOUNT (0) | 2006.11.28 |
excel을 이용하여 테이블에 insert하는 stored procedure (0) | 2006.05.31 |
데이터가 없는 테이블 찾는 stored procedure (0) | 2006.05.31 |
import, export사용 (0) | 2005.09.06 |