62. Минимальная и максимальная зарплата по отделам среди неуволенных сотрудников #
Условие задачи:
📌 В базе данных есть две таблицы:
units— подразделения компанииemployees— сотрудники компании
Нужно написать SQL-запрос, который вернёт:
unit_id,минимальную зарплату (
min_salary),максимальную зарплату (
max_salary)
👉 Только среди сотрудников, у которых fired = false.
Структура таблиц:
units:
id -- primary key
name -- название подразделения
employees:
id -- primary key
unit_id -- foreign key -> units.id
salary -- зарплата
fired -- флаг уволен (true / false)
Спойлеры к решению
Подсказки
💡 Нужно агрегировать данные по
💡 Используйте
💡 Фильтрация по
💡 Если требуется вернуть только
unit_id.💡 Используйте
MIN(salary) и MAX(salary).💡 Фильтрация по
fired = false выполняется до агрегации.💡 Если требуется вернуть только
unit_id, можно не делать JOIN с units.Решение
SELECT
e.unit_id,
MIN(e.salary) AS min_salary,
MAX(e.salary) AS max_salary
FROM employees e
WHERE e.fired = false
GROUP BY e.unit_id;
Комментарий:
WHERE e.fired = false— исключаем уволенных сотрудников.GROUP BY e.unit_id— считаем агрегаты по каждому отделу.MINиMAXсчитают минимальную и максимальную зарплату внутри отдела.
Если нужно дополнительно вывести название отдела:
SELECT
u.id AS unit_id,
u.name AS unit_name,
MIN(e.salary) AS min_salary,
MAX(e.salary) AS max_salary
FROM units u
JOIN employees e
ON e.unit_id = u.id
AND e.fired = false
GROUP BY u.id, u.name;