56. Найти минимальную и максимальную зарплату по отделам среди неуволенных сотрудников
Условие задачи:
Даны таблицы units и employees.
Необходимо для каждого отдела вывести:
ID отдела;
минимальную зарплату;
максимальную зарплату
среди сотрудников, у которых fired = false.
Код:
units:
id int PK
name text
employees:
id int PK
unit_id int FK → units.id
salary numeric
fired boolean
Спойлеры к решению
Подсказки
💡 Для основного решения таблица
💡 Сначала оставь только неуволенных сотрудников через
💡 Сгруппируй сотрудников по
💡 Для зарплат используй агрегатные функции
units не требуется: нужный unit_id уже находится в employees.💡 Сначала оставь только неуволенных сотрудников через
WHERE fired = false.💡 Сгруппируй сотрудников по
unit_id.💡 Для зарплат используй агрегатные функции
MIN() и MAX().Решение
SELECT
unit_id,
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees
WHERE fired = false
GROUP BY unit_id;
Условие:
WHERE fired = false
оставляет только неуволенных сотрудников.
Затем:
GROUP BY unit_id
разбивает их по отделам, а MIN() и MAX() вычисляют минимальную и максимальную зарплату внутри каждого отдела.
Если требуется вывести все отделы, включая те, в которых нет неуволенных сотрудников, можно использовать LEFT JOIN:
SELECT
u.id AS unit_id,
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;
В этом случае для отдела без неуволенных сотрудников min_salary и max_salary будут равны NULL.