NULLIF и IIF
Часть раздела Продвинутый уровень путешествия по SQL на Coddy — урок 4 из 27.
Еще два условных помощника, оба небольшие и полезные.
NULLIF(a, b) возвращает NULL, когда a = b, в противном случае — a. Классический вариант использования — защита от деления на ноль:
SELECT total / NULLIF(count, 0) AS average
FROM statsЕсли count равно нулю, мы получим NULL вместо ошибки.
IIF(cond, a, b) — это сокращенная запись с двумя ветвями для CASE WHEN cond THEN a ELSE b END. Используйте её, когда выбор бинарный; используйте CASE, когда ветвей больше.
Задание
ЛегкоДоступные таблицы и столбцы:
<strong>matches</strong>:<strong>id</strong>,<strong>shots</strong>,<strong>goals</strong>
Для каждого матча верните:
idconversion:goals * 1.0 / shots, ноNULL, когдаshotsравно0(используйтеNULLIF)verdict:'win', когдаgoals > 0, в противном случае'no goals'(используйтеIIF)
Отсортируйте по id.
Шпаргалка
NULLIF(a, b) возвращает NULL, когда a = b, в противном случае возвращает a. Полезно для предотвращения деления на ноль:
SELECT total / NULLIF(count, 0) AS average
FROM statsIIF(cond, a, b) — это сокращенная запись для CASE с двумя ветвями:
SELECT IIF(goals > 0, 'win', 'no goals') AS verdict
FROM matchesПопробуйте сами
SELECT id,
-- преобразование с использованием NULLIF
-- вердикт с использованием IIF
FROM matches
ORDER BY id
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.