Department Top Three Salaries

hard database ranking window function

Problem

Write a SQL query to find employees who are among the top three earners in each department (dense rank ≤ 3).

SQL: SELECT d.name AS Department, e.name AS Employee, e.salary AS Salary FROM (SELECT *, DENSE_RANK() OVER (PARTITION BY departmentId ORDER BY salary DESC) AS r FROM Employee) e JOIN Department d ON e.departmentId = d.id WHERE e.r <= 3;

InputIT: Joe=85k, Henry=85k, Sam=60k, Max=90k; Sales: Janet=69k, Randy=85k
OutputIT: Max, Joe, Henry, Sam; Sales: Randy, Janet

SELECT d.name AS Department, e.name AS Employee, e.salary AS Salary
FROM (SELECT *, DENSE_RANK() OVER (PARTITION BY departmentId
                                   ORDER BY salary DESC) AS r FROM Employee) e
JOIN Department d ON e.departmentId = d.id
WHERE e.r <= 3;
Time: O(n log n) Space: O(n)