Нужно посчитать количество оплаченных заказов (status = 'paid'). Какое выражение корректно вернёт число оплаченных, если в столбце status бывают NULL?

ACOUNT(CASE WHEN status = 'paid' THEN 1 ELSE 0 END)
BCOUNT(status = 'paid')
CCOUNT(CASE WHEN status = 'paid' THEN 1 END)
DCOUNT(COALESCE(status, 'paid'))
Правильный ответ. COUNT(column) считает не-NULL, поэтому удобно делать COUNT(CASE WHEN ... THEN 1 END) — там NULL для не-подходящих строк.

Разбор

COUNT считает количество не-NULL значений. Если использовать COUNT(CASE WHEN status = 'paid' THEN 1 END), то для оплаченных вернётся 1, а для остальных (включая NULL в status) — NULL, поэтому будут посчитаны только оплаченные. Вариант с ELSE 0 неверен: 0 — это не NULL, значит будут посчитаны все строки.

Проверь себя · 1/3разбор после ответа
Нужно выбрать пользователей без email. Какое условие в WHERE корректно найдёт строки, где email отсутствует (равен NULL)?
Тренировать SQL в Telegram

Ещё вопросы по теме «Выражения и NULL»