При работе с данными о сотрудниках одним из общих требований является определение сотрудника с самой высокой зарплатой в каждом отделе. Эта задача важна для различных целей, таких как анализ производительности, выявление лучших сотрудников или сравнительный анализ. В этой статье блога мы рассмотрим несколько методов достижения этой цели с помощью SQL, приведя примеры кода для каждого подхода. К концу этой статьи вы получите полное представление о различных методах получения максимальной зарплаты из каждого отдела, что позволит вам выбрать тот, который лучше всего соответствует вашим потребностям.
Метод 1: подзапрос с помощью MAX() и GROUP BY
Первый подход предполагает использование подзапроса вместе с функцией MAX() и предложением GROUP BY. Этот метод позволяет получить максимальную зарплату для каждого отдела в одном запросе. Вот пример:
SELECT department, MAX(salary) AS max_salary
FROM employees
GROUP BY department;
Метод 2: Самостоятельное присоединение
Другой метод получения максимальной зарплаты от каждого отдела — использование самостоятельного присоединения. Этот подход предполагает объединение таблицы на основе столбцов «Отдел» и «Зарплата» с фильтрацией строк, в которых существует более высокая зарплата для того же отдела. Вот пример:
SELECT e.department, e.salary AS max_salary
FROM employees e
LEFT JOIN employees e2 ON e.department = e2.department AND e.salary < e2.salary
WHERE e2.salary IS NULL;
Метод 3: оконные функции
Оконные функции предоставляют мощный способ вычисления результатов на основе определенного окна или подмножества строк. Используя функцию ROW_NUMBER(), мы можем присвоить рейтинг каждому сотруднику в его отделе на основе его зарплаты, что позволяет нам выбирать только сотрудников с самым высоким рейтингом. Вот пример:
SELECT department, salary AS max_salary
FROM (
SELECT department, salary, ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees
) ranked_employees
WHERE rank = 1;
Метод 4: Коррелированный подзапрос
Коррелирующий подзапрос — еще один эффективный метод получения максимальной зарплаты в каждом отделе. Этот метод предполагает сравнение зарплаты каждого сотрудника с максимальной зарплатой в его отделе. Вот пример:
SELECT department, salary AS max_salary
FROM employees e
WHERE salary = (
SELECT MAX(salary)
FROM employees
WHERE department = e.department
);
В этой статье мы рассмотрели несколько методов получения максимальной зарплаты каждого отдела с помощью SQL. Мы рассмотрели подходы с использованием подзапросов, самообъединений, оконных функций и коррелированных подзапросов. Каждый метод имеет свои сильные стороны и может оказаться более подходящим в зависимости от ваших конкретных требований и характеристик вашего набора данных. Понимая эти методы, вы сможете эффективно получать самые высокие зарплаты в отделах для различных целей анализа или отчетности.