Input: Employee table:+----+-------+--------+--------------+| id | name | salary | departmentId |+----+-------+--------+--------------+| 1 | Joe | 70000 | 1 || 2 | Jim | 90000 | 1 || 3 | Henry | 80000 | 2 || 4 | Sam | 60000 | 2 || 5 | Max | 90000 | 1 |+----+-------+--------+--------------+Department table:+----+-------+| id | name |+----+-------+| 1 | IT || 2 | Sales |+----+-------+Output: +------------+----------+--------+| Department | Employee | Salary |+------------+----------+--------+| IT | Jim | 90000 || Sales | Henry | 80000 || IT | Max | 90000 |+------------+----------+--------+Explanation: Max and Jim both have the highest salary in the IT department and Henry has the highest salary in the Sales department.
문제
Write an SQL query to find employees who have the highest salary in each of the departments.
답
SELECT
t1.Department
,t1.Employee
,t1.Salary
FROM
(
SELECT
d.name AS 'Department'
,e.name AS 'Employee'
,e.salary AS 'Salary'
,FIRST_VALUE(e.salary) OVER(PARTITION BY d.id ORDER BY e.salary DESC) AS 'deptTopSalary'
FROM Employee e
JOIN Department d ON e.departmentId = d.id
) AS t1
WHERE t1.Salary = t1.deptTopSalary
;