https://leetcode.com/problems/department-highest-salary/description/
각 부서별로 최고 연봉을 받는 직원을 순서에 상관없이 반환하는 쿼리를 작성
각 부서별로 최고 연봉과 그 해당 부서를 조건 (max(salary), departmentId)으로 설정하고,
이에 해당하는 담당자를 반환하는 방식으로 쿼리를 작성
SELECT B.name AS Department, A.NAME AS Employee, salary
FROM Employee A
inner join Department B on A.departmentid = B.id
WHERE (A.departmentid, SALARY) IN (
SELECT departmentid, MAX(salary)
FROM Employee
GROUP BY departmentID
)
WITH문에서 MAX() 윈도우함수로 부서 별 가장 높은 salary를 구한다.
동일 부서 내 사람들의 Salary 중 가장 큰 Salary가 표시되는 Max_Salary 열이 새로 생긴다.
Department id를 기준으로 INNER JOIN하여 출력을 위한 Department 이름을 가져온다.
WHERE절에서 Salary = Max_Salary로 가장 높은 임금에 해당하는 행만 가져온다.
WITH CTE AS (
SELECT A.name AS Employee,
B.name AS Department,
Salary,
MAX(Salary) OVER(PARTITION BY DepartmentId) as Max_Salary
FROM Employee A
INNER JOIN Department B ON A.departmentId = B.id
)
SELECT Employee,
Department,
Salary
FROM CTE
WHERE Salary = Max_Salary