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

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.