62. Найти минимальную и максимальную зарплату по отделам среди неуволенных сотрудников
Условие задачи:
Даны таблицы:
units— подразделения компании;employees— сотрудники компании.
Необходимо для каждого подразделения, в котором есть неуволенные сотрудники, вывести:
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)
Спойлеры к решению
Подсказки
fired = false.💡 Затем сгруппируй их по
unit_id.💡 Для поиска минимальной и максимальной зарплаты используй
MIN() и MAX().💡 Если нужен только
unit_id, соединение с таблицей units не требуется.Решение
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() вычисляют минимальную и максимальную зарплату внутри этой группы.
Если дополнительно нужно вывести название подразделения:
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;
Если необходимо показывать также подразделения, в которых нет неуволенных сотрудников, вместо JOIN следует использовать LEFT JOIN. Для таких подразделений min_salary и max_salary будут равны NULL.