Как сделать SQL запрос для подсчета количества сотрудников в категориях зарплаты с выводом 0 для пустых категорий?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Нужно показать, что для подсчета по категориям используется LEFT JOIN с таблицей-справочником категорий или генерация полного набора категорий. Тогда даже пустые категории попадут в результат с нулем. Обычно итог строится через GROUP BY и COUNT, а пропуски заменяются на 0 через COALESCE.
Определение:
Задача решается так, чтобы сначала получить полный список всех возможных категорий зарплаты, а затем присоединить к нему сотрудников. Если в какой-то категории сотрудников нет, строка все равно останется в результате, а количество будет равно нулю. Для этого обычно используют LEFT JOIN от списка категорий к агрегированным данным или к таблице сотрудников напрямую.
Пример использования:
Например, есть категории зарплаты low, middle, high, но в данных сотрудники есть только в middle и high. Чтобы показать 0 для low, можно взять отдельную таблицу категорий и присоединить к ней подсчет сотрудников.
SELECT
c.salary_category,
COALESCE(e.cnt, 0) AS employee_count
FROM salary_categories c
LEFT JOIN (
SELECT
salary_category,
COUNT(*) AS cnt
FROM employees
GROUP BY salary_category
) e
ON e.salary_category = c.salary_category
ORDER BY c.salary_category;
Пояснение кода:
salary_categories— таблица или подзапрос со всеми возможными категориями зарплаты, включая те, где пока нет сотрудников.- В подзапросе по
employeesсчитается количество сотрудников в каждой категории черезGROUP BY salary_category. LEFT JOINгарантирует, что все категории изsalary_categoriesпопадут в результат.- Если для категории нет совпадений, поле
cntбудетNULL. COALESCE(e.cnt, 0)заменяетNULLна0, чтобы пустые категории отображались с нулевым количеством.
Ключевые моменты:
- Нужен не
INNER JOIN, аLEFT JOIN, иначе пустые категории исчезнут. - Полный список категорий должен быть заранее известен: из справочника, CTE или
VALUES. COUNT(*)считают внутри группировки, а не после объединения без контроля за пустыми категориями.COALESCEиспользуется именно для заменыNULLна0.- Если справочника категорий нет, его обычно создают через CTE или явный список значений.