* 순위 매기는 함수 ( WINDOW FUNCTION )
RANK() OVER(정렬기준) | DENSE_RANK() OVER(정렬기준)
- RANK() OVER (정렬기준) : 동일한 순위 이후의 등수를 동일한 인원수 만큼 건너뛰고 순위 계산
EX) 공동 1위가 2명 그 다음 순위는 3위 => 1 1 3
- DENSE_RANK() OVER(정렬기준) : 동일한 순위가 있다고 해도 그 다음 등수를 무조건 1씩 증가 시킴
EX) 공동 1위가 2명이더라도 그 다음 순위를 2위 => 1 1 2
- row_number() over(정렬기준) : 동일한 순위가 있더라도 그 다음 순위를 부여 => 1 2 3 4 ..
>> 세 함수는 무조건 SELECT절에서만 사용 가능!!
RANK()
-- 급여가 높은 순대로 순위를 매겨서 조회
SELECT EMP_NAME, SALARY, RANK() OVER(ORDER BY SALARY DESC) AS "순위"
FROM EMPLOYEE;
-- 공동 21위 2명 그 뒤의 순위는 23 => 마지막 순위랑 조회된 행수랑 같음
DENSE_RANK()
SELECT EMP_NAME, SALARY, DENSE_RANK() OVER(ORDER BY SALARY DESC) AS "순위"
FROM EMPLOYEE;
-- 공동 20위 2명 그 뒤의 순위는 21 => 마지막 순위랑 조회된 행수가 다름
* 주의사항 *
-- 상위 5명만 조회
SELECT EMP_NAME, SALARY, RANK() OVER(ORDER BY SALARY DESC) AS "순위"
FROM EMPLOYEE;
--WHERE 순위 <= 5;
--WHERE RANK() OVER(ORDER BY SALARY DESC) <= 5; -- WHERE절에 WINDOW FUNCTION X\
-- 결국 인라인뷰를 쓸 수 밖에 없음!!
SELECT *
FROM (SELECT EMP_NAME, SALARY, RANK() OVER(ORDER BY SALARY DESC) AS "순위"
FROM EMPLOYEE )
WHERE 순위 <= 5;