6. Найти минимальную и максимальную зарплату по отделам среди работающих сотрудников
Условие задачи:
Даны две таблицы:
units— подразделения компании;employees— сотрудники.
Необходимо для каждого подразделения вывести минимальную и максимальную зарплату среди сотрудников, которые не уволены.
Код:
units
id INT PRIMARY KEY
name TEXT
employees
id INT PRIMARY KEY
unit_id INT REFERENCES units(id)
salary NUMERIC
fired BOOLEAN
Спойлеры к решению
Подсказки
💡 Соедини
💡 Оставь только сотрудников с
💡 Сгруппируй записи по подразделению.
💡 Для поиска минимальной и максимальной зарплаты используй
units и employees по units.id = employees.unit_id.💡 Оставь только сотрудников с
fired = FALSE.💡 Сгруппируй записи по подразделению.
💡 Для поиска минимальной и максимальной зарплаты используй
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
WHERE e.fired = FALSE
GROUP BY u.id, u.name;
WHERE e.fired = FALSE исключает уволенных сотрудников до выполнения агрегации.
После этого записи группируются по подразделениям, а:
MIN(e.salary)
MAX(e.salary)
возвращают минимальную и максимальную зарплату в каждом отделе.
Подразделения, в которых нет работающих сотрудников, в результат не попадут из-за использования JOIN.