Отделы, где работает более двух сотрудников

Соедините отделы с сотрудниками, сгруппируйте по отделу и примените HAVING COUNT(*) > 2. В примере результат — D1.

Короткий ответ

Что ответить на собеседовании

Соедините отделы с сотрудниками, сгруппируйте по отделу и примените HAVING COUNT(*) > 2. В примере результат — D1.

Подробный разбор

Ответ с пояснениями

Условие

Составьте SQL‑запрос, который выводит названия отделов, в которых число сотрудников превышает два.

CREATE TABLE department
    (id int(11), name varchar(100))
;

CREATE TABLE employee
    (id int(11), department_id int(11), chief_id int(11), name varchar(100), salary int(11))
;

INSERT INTO department
    (id, name)
VALUES
    (1, "D1"),
    (2, "D2"),
    (3, "D3")
;

INSERT INTO employee
    (id, department_id, chief_id, name, salary)
VALUES
    (1, 1, 5, "John", 100),
    (2, 1, 5, "Misha", 600),
    (3, 2, 5, "Eugen", 300),
    (4, 2, 5, "Tolya", 400),
    (5, 1, NULL, "Stepan Chief", 500);

Ответ

Соедините отделы с сотрудниками, сгруппируйте по отделу и примените HAVING COUNT(*) > 2. В примере результат — D1.

SELECT d.name
FROM department AS d
JOIN employee AS e ON e.department_id = d.id
GROUP BY d.id, d.name
HAVING COUNT(*) > 2;

В D1 находятся John, Misha и Stepan Chief — три сотрудника. В D2 два сотрудника, а в D3 нет ни одного, поэтому они исключаются. Поле chief_id здесь не влияет на подсчёт: руководитель тоже учитывается как сотрудник своей строки.

Группировка включает идентификатор, чтобы разные отделы с одинаковым названием не сливались. HAVING используется потому, что условие проверяет агрегат уже сформированной группы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее