데이터베이스/Today's Query

[Today's Query] 부서별 연봉 3위까지 사원의 이름과 연봉 조회 (2025/01/08)

연화 2025. 1. 8. 14:49
WITH tbl_ranking AS (
	SELECT
		RANK() OVER(partition by d.dept_no ORDER BY s.salary DESC) AS ranking,
		CONCAT(e.first_name, ' ', e.last_name) AS name,
		s.salary,
		d2.dept_name
	FROM
		(
			SELECT emp_no, MAX(salary) AS salary
			FROM salaries
			GROUP BY emp_no
		) AS s
	JOIN
		employees AS e ON e.emp_no = s.emp_no
	JOIN
		dept_emp AS d ON e.emp_no = d.emp_no
	JOIN
		departments AS d2 ON d2.dept_no = d.dept_no
)
SELECT *
FROM tbl_ranking
WHERE ranking <= 3;
💡 RANK() 함수 - partition by 속성으로 그룹화, ORDER BY 속성으로 정렬하여 순위를 매길 수 있다.
부서별 그룹화, 연봉 높은 순 정렬한 순위로 가상 테이블을 만들고, 가상 테이블의 ranking 속성을 조건으로 3위까지 출력함