Отбор отделов с числом сотрудников более двух

Используйте JOIN, GROUP BY по идентификатору отдела и HAVING COUNT(*) > 2. Для приведённых данных будет выбрано только D1.

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

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

Используйте JOIN, GROUP BY по идентификатору отдела и HAVING COUNT(*) > 2. Для приведённых данных будет выбрано только D1.

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

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

Условие

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

CREATE TABLE department (
    id INT,
    name VARCHAR(100)
);

CREATE TABLE employee (
    id INT,
    department_id INT,
    chief_id INT,
    name VARCHAR(100),
    salary INT
);

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

Ответ

Используйте JOIN, GROUP BY по идентификатору отдела и 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;

В первом отделе работают John, Misha и Stepan Chief, во втором — Eugen и Tolya, в третьем сотрудников нет. chief_id не участвует в условии подсчёта.

HAVING фильтрует агрегированные группы, тогда как WHERE применялся бы к строкам до подсчёта. В исходном блоке указан маркер Python, но содержимое является SQL. Для переносимости строковые литералы при вставке следует записывать в одинарных кавычках, например 'D1'.

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

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

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

Подробнее