56. Минимальная и максимальная зарплата по отделам среди неуволенных сотрудников
Условие задачи:
📌 Даны таблицы units и employees.
Нужно написать SQL-запрос, который вернёт:
ID отдела,
минимальную зарплату,
максимальную зарплату
— среди сотрудников, у которыхfired = false.
Структура таблиц:
units:
id int PK
name text
employees:
id int PK
unit_id int FK → units.id
salary numeric
fired boolean
Спойлеры к решению
Подсказки
💡 Делаем
💡 Фильтруем только
💡 Группируем по отделам (
💡 Используем
💡 Если нужно вернуть все отделы, используйте
JOIN таблиц по unit_id.💡 Фильтруем только
fired = false.💡 Группируем по отделам (
GROUP BY).💡 Используем
MIN() и MAX() для зарплат.💡 Если нужно вернуть все отделы, используйте
LEFT JOIN.Решение
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;
Альтернативный вариант (если нужно показывать даже отделы без сотрудников):
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
LEFT JOIN employees e
ON e.unit_id = u.id
AND e.fired = false
GROUP BY u.id, u.name;