185. Три самые высокие зарплаты в департаменте

Используйте DENSE_RANK по зарплате внутри отдела и оставьте ранги до трёх. Это выбирает три уникальных уровня зарплаты вместе со всеми сотрудниками на них.

Короткий ответ

Что ответить на собеседовании

Используйте DENSE_RANK по зарплате внутри отдела и оставьте ранги до трёх. Это выбирает три уникальных уровня зарплаты вместе со всеми сотрудниками на них.

Подробный разбор

Ответ с пояснениями

Условие

  1. Три самые высокие зарплаты в департаменте

Руководителей компании интересует, кто зарабатывает больше всего денег в каждом из отделов. Высокооплачиваемым сотрудником в отделе считается тот, чья зарплата входит в тройку самых высоких уникальных зарплат в этом отделе.

Напишите решение для определения высокооплачиваемых сотрудников в каждом из отделов.

Возвращает таблицу результатов в любом порядке.

Формат результата представлен в следующем примере.

Ответ

Используйте DENSE_RANK по зарплате внутри отдела и оставьте ранги до трёх. Это выбирает три уникальных уровня зарплаты вместе со всеми сотрудниками на них.

При стандартной схеме Employee(id, name, salary, departmentId) и Department(id, name):

WITH ranked AS (
    SELECT name, salary, departmentId,
           DENSE_RANK() OVER (
               PARTITION BY departmentId ORDER BY salary DESC
           ) AS salary_rank
    FROM Employee
    WHERE salary IS NOT NULL
)
SELECT d.name AS Department, r.name AS Employee, r.salary AS Salary
FROM ranked r
JOIN Department d ON d.id = r.departmentId
WHERE r.salary_rank <= 3;

ROW_NUMBER здесь неверен: он ограничит число сотрудников, а не число различных зарплат. В отделе может получиться больше трёх строк.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее