Нужно посчитать количество оплаченных заказов (status = 'paid'). Какое выражение корректно вернёт число оплаченных, если в столбце status бывают NULL?
A
COUNT(CASE WHEN status = 'paid' THEN 1 ELSE 0 END)B
COUNT(status = 'paid')C
COUNT(CASE WHEN status = 'paid' THEN 1 END)D
COUNT(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)?Ещё вопросы по теме «Выражения и NULL»
- Нужно выбрать пользователей без email. Какое условие в `WHERE` корректно найдёт строки, где `email` отсутствует (равен `NULL`)?
- В таблице `orders` поле `promo_code` может быть `NULL`. Что произойдёт со строкой, где `promo_code` = `NULL`, при фильтре `WHERE promo_code <> 'NONE'`?
- В таблице `sessions` 5 строк. Значения `utm_source`: `'google'`, `NULL`, `'email'`, `NULL`, `NULL`. Чему равны `COUNT(*)` и `COUNT(utm_source)`?
- В таблице `payments` три строки со значениями `amount`: `NULL`, `NULL`, `NULL`. Что вернут запросы `SELECT SUM(amount)` и `SELECT SUM(COALESCE(amount, 0))`?
- Что вернёт выражение `COALESCE(NULL, NULL, 'web', 'app')`?
- Все вопросы по «Выражения и NULL» →