Есть таблица payments(amount), в части строк amount равно NULL. Какой запрос посчитает количество всех строк в таблице, включая строки с NULL в столбце amount?

ASELECT COUNT(amount) FROM payments;: счёт пропустит строки, где значение amount равно NULL
BSELECT COUNT(amount) FROM payments WHERE amount IS NOT NULL;: фильтр и COUNT(amount) оба исключают NULL
CSELECT COUNT(*) FROM payments;: счёт всех строк таблицы, включая строки со значением NULL в amount
DSELECT COUNT(*) FROM payments WHERE amount IS NOT NULL;: фильтр уберёт строки с NULL ещё до подсчёта
Правильный ответ. COUNT(*) считает все строки, а COUNT(колонка) — только строки, где колонка не равна NULL.

Разбор

Выражение COUNT(*) не зависит от значений конкретных колонок и считает все строки, включая те, где NULL встречается в каких-то полях. В отличие от него COUNT(amount) игнорирует строки, где amount равно NULL. Дополнительный фильтр WHERE amount IS NOT NULL уберёт такие строки и до COUNT(*), поэтому результат уже не будет включать NULL-строки.

Проверь себя · 1/3разбор после ответа
Как GROUP BY обрабатывает значения NULL в столбце группировки?
Тренировать SQL в Telegram

Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»