검색결과 리스트
글
oracle ] rank() function
/*
순위와 관련된 오라클 함수
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
RECENT COMMENT