Минимальная и максимальная зарплата по отделам среди неуволенных сотрудников

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.