Дано выражение: CASE WHEN status = 'paid' THEN amount ELSE 0 END. Что вернётся, если status равно NULL, а amount равно 500?

AВернётся NULL, потому что любое участие NULL в выражении автоматически делает результат неопределённым
BВернётся 0: условие status = 'paid' даёт UNKNOWN из-за NULL, и поэтому сработает ветка ELSE
CВернётся 500: значение amount подставится напрямую, ведь поле status не равно строке 'paid'
DБудет ошибка выполнения, потому что сравнение со значением NULL запрещено в выражении CASE
Правильный ответ. Если условие WHEN даёт не TRUE (включая UNKNOWN из-за NULL), сработает ветка ELSE.

Разбор

При status = NULL сравнение status = 'paid' возвращает UNKNOWN, а не TRUE или FALSE. В выражении CASE ветка WHEN срабатывает только при TRUE, поэтому в нашем случае выберется ELSE 0, и результат будет 0, даже если amount равно 500. Чтобы явно учитывать пропуски, можно добавить отдельную ветку WHEN status IS NULL THEN .... Запрета на сравнение с NULL в CASE нет — оно просто даёт UNKNOWN.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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