Gymterview
junior

В чем разница между COUNT(*) и COUNT(column)?

COUNT(*) подсчитывает общее количество строк в наборе, включая строки с NULL-значениями, поскольку оперирует записями, а не конкретными столбцами. COUNT(column) подсчитывает количество не-NULL значений в указанном столбце, пропуская строки, где этот столбец равен NULL.

Пример
-- Пример: таблица с 5 строками, в столбце bonus у двух строк NULL
-- COUNT(*) вернёт 5
-- COUNT(bonus) вернёт 3

SELECT
    COUNT(*) AS total_rows,           -- 5
    COUNT(bonus) AS rows_with_bonus   -- 3
FROM employees;

Дополнительно, COUNT(DISTINCT column) подсчитывает количество уникальных не-NULL значений. Выбор между COUNT(*) и COUNT(column) должен быть осознанным: если нужно общее количество строк — используйте COUNT(*), если нужно знать, сколько строк имеют заполненное значение — используйте COUNT(column).

На собеседовании: разница в обработке NULL — это ключевой момент. Частая ошибка — использовать COUNT(column) для подсчёта всех строк, не учитывая, что NULL-строки будут пропущены.