Menu
Coddy logo textTech

Топ-N в группе

Часть раздела Продвинутый уровень путешествия по SQL на Coddy. Урок 23 из 27.

«Самый высокооплачиваемый сотрудник в каждом отделе» — классический пример из учебника. Рецепт всегда один: ROW_NUMBER() с PARTITION BY, затем отфильтровать строки до строки 1.

WITH ranked AS (
    SELECT name, department, salary,
           ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
    FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1

Нужны 3 первых результата вместо 1-го? Замените WHERE rn = 1 на WHERE rn <= 3. Хотите учитывать совпадения на верхней позиции? Замените ROW_NUMBER() на RANK().

challenge icon

Задание

Легко

Доступные таблицы и столбцы:

  • employees: id, name, department, salary

Верните самого высокооплачиваемого сотрудника в каждом department. Выведите name, department и salary, отсортированные по department. Если в рамках одного отдела два сотрудника делят первое место по зарплате, верните только одного: сотрудника с меньшим id.

Попробуйте сами

WITH ranked AS (
    -- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
quiz iconПроверьте себя

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

Все уроки раздела Продвинутый уровень

Потренируйтесь самостоятельно: Песочница SQL