Департаменты с количеством сотрудников больше трёх

65. Найти департаменты с количеством сотрудников больше трёх

Условие задачи:
Даны таблицы department и users.

Необходимо вывести департаменты, в которых работает больше трёх сотрудников.

Для каждого такого департамента вывести:

  • department_id;

  • название департамента;

  • количество сотрудников.

Код:

CREATE TABLE department (
    department_id BIGINT PRIMARY KEY,
    department_name VARCHAR(255)
);

CREATE TABLE users (
    user_id BIGINT PRIMARY KEY,
    full_name VARCHAR(255),
    department_id BIGINT,
    CONSTRAINT fk_department
        FOREIGN KEY (department_id)
        REFERENCES department(department_id)
);

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

Подсказки
💡 Соедини сотрудников с департаментами по department_id.
💡 Сгруппируй строки по департаменту.
💡 Для подсчёта сотрудников используй COUNT().
💡 Условие на количество строк после группировки задаётся через HAVING, а не WHERE.

Решение
SELECT
    d.department_id,
    d.department_name,
    COUNT(u.user_id) AS employee_count
FROM department d
JOIN users u
    ON u.department_id = d.department_id
GROUP BY
    d.department_id,
    d.department_name
HAVING COUNT(u.user_id) > 3;

Сначала сотрудники соединяются со своими департаментами:

JOIN users u
    ON u.department_id = d.department_id

После этого строки группируются по департаментам:

GROUP BY
    d.department_id,
    d.department_name

COUNT(u.user_id) считает сотрудников в каждом департаменте, а:

HAVING COUNT(u.user_id) > 3

оставляет только те департаменты, где работает больше трёх человек.

Обычный JOIN здесь подходит, поскольку департаменты без сотрудников в любом случае не удовлетворяют условию COUNT > 3.