Таблица `employees`:

Для трёх лучших различных уровней зарплаты используйте DENSE_RANK по отделу и оставьте rank ≤ 3. Тогда все сотрудники с одинаковой зарплатой попадут вместе.

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

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

Для трёх лучших различных уровней зарплаты используйте DENSE_RANK по отделу и оставьте rank ≤ 3. Тогда все сотрудники с одинаковой зарплатой попадут вместе.

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

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

Условие

Таблица employees:

id name department salary
1 A IT 100
2 B IT 100
3 C IT 90
4 D IT 80
5 E HR 200
6 F HR 180

Нужно вывести всех сотрудников, которые входят в топ-3 по зарплате внутри своего отдела. Если у нескольких сотрудников одинаковая зарплата, они должны попасть все (даже если это расширит топ-3 до 4-5 человек).

Ответ

Для трёх лучших различных уровней зарплаты используйте DENSE_RANK по отделу и оставьте rank ≤ 3. Тогда все сотрудники с одинаковой зарплатой попадут вместе.

WITH ranked AS (
    SELECT id, name, department, salary,
           DENSE_RANK() OVER (
               PARTITION BY department ORDER BY salary DESC
           ) AS salary_rank
    FROM employees
)
SELECT id, name, department, salary
FROM ranked
WHERE salary_rank <= 3
ORDER BY department, salary DESC, id;

При такой трактовке в IT попадут A, B, C и D, в HR — E и F. Если нужны именно три позиции сотрудников с включением совпадений на границе третьей, нужен RANK, и IT тогда даст A, B, C. Этот смысл «топ-3» стоит уточнить до реализации.

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

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

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

Подробнее