Tech for good

[Stratascratch/SQL] Top 10 Salaries 본문

IT/Data Science

[Stratascratch/SQL] Top 10 Salaries

Diana Kang 2025. 2. 27. 05:58

https://platform.stratascratch.com/coding/9853-find-the-top-5-highest-salaries?code_type=3

 

select worker_id,
	   department,
       salary
from
	(select *,
    	rank() over(order by salary desc) as rnk
     from worker) cte
where rnk <= 10

순위함수

  • rank() over
    • 중복 값들에 대해서 동일 순위로 표시하고, 중복 순위 다음 값에 대해서는 중복 개수만큼 떨어진 순위로 출력하도록 하는 함수.
  • dense_rank() over
    • 중복 값들에 대해서 동일 순위로 표시하고, 중복 순위 다음 값에 대해서는 중복 값 개수와 상관없이 순차적인 순위 값을 출력하도록 하는 함수.
  • row_number() over
    • 중복 값들에 대해서도 순차적인 순위를 표시하도록 출력하는 함수.

그룹별 순위 구하기

  • OVER 절 내부에 PARTITION BY 절을 사용해서 그룹별로 순위를 부여할 수 있다.
    • 그룹별로 1부터 순차적으로 순위를 부여하며, 그룹이 바뀌면 다시 1부터 순위를 부여한다.
SELECT ename
     , job
     , sal
     , RANK() OVER(PARTITION BY job ORDER BY sal DESC) AS rank_sal
  FROM emp
 WHERE job IN ('MANAGER', 'SALESMAN')

 

(+ 참고: https://doorbw.tistory.com/221, https://gent.tistory.com/580)