Необходимо написать sql запрос, который вернет минимальную и максимальную зарплату по всем отделам среди не уволенных сотрудников

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.