Task Livecoding SQL Min Max Salary by Unit Active

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

Условие задачи:
📌 В базе данных есть две таблицы:

  • units — подразделения компании

  • employees — сотрудники компании

Нужно написать SQL-запрос, который вернёт:

  • 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)

Спойлеры к решению

Подсказки
💡 Нужно агрегировать данные по unit_id.
💡 Используйте MIN(salary) и MAX(salary).
💡 Фильтрация по fired = false выполняется до агрегации.
💡 Если требуется вернуть только unit_id, можно не делать JOIN с units.

Решение
SELECT
    e.unit_id,
    MIN(e.salary) AS min_salary,
    MAX(e.salary) AS max_salary
FROM employees e
WHERE e.fired = false
GROUP BY e.unit_id;

Комментарий:

  • WHERE e.fired = false — исключаем уволенных сотрудников.

  • GROUP BY e.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;