Численность персонала по каждому отделу

Используйте LEFT JOIN от departments к employees и считайте e.id, а не COUNT(*). Тогда отдел без сотрудников останется в выдаче с количеством 0.

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

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

Используйте LEFT JOIN от departments к employees и считайте e.id, а не COUNT(*). Тогда отдел без сотрудников останется в выдаче с количеством 0.

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

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

Условие

Сформировать перечень всех подразделений, указав количество их работников. В итоговый набор следует включать лишь те отделы, у которых присутствует название.

CREATE TABLE departments (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(id)
);

Ответ

Используйте LEFT JOIN от departments к employees и считайте e.id, а не COUNT(*). Тогда отдел без сотрудников останется в выдаче с количеством 0.

SELECT d.id, d.name, COUNT(e.id) AS employee_count
FROM departments d
LEFT JOIN employees e ON e.department_id = d.id
WHERE d.name IS NOT NULL AND TRIM(d.name) <> ''
GROUP BY d.id, d.name;

NOT NULL уже задан в DDL, но не запрещает пустые или пробельные названия — поэтому добавлен TRIM. Группировка по ID сохраняет отдельные отделы с одинаковыми названиями. COUNT(*) дал бы 1 для пустого отдела из-за строки, сохранённой внешним соединением.

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

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

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

Подробнее