Что означает СЛУЧАЙНАЯ СУММА (total_of_A), КОГДА 0 ТОГДА 0 ПОЛНАЯ СУММА (B) / SUM(total_of_A) END
Пытаясь понять CASE
(Transact-SQL) выражение, но в итоге получилось много путаницы. Может ли кто-нибудь объяснить следующее утверждение простыми словами?
CASE SUM(total_of_A) WHEN 0 THEN 0 ELSE SUM(B) / SUM(total_of_A) END;
Я прочитал следующее, но это не устраняет путаницу
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ELSE else_result_expression ]
END
3 ответа
Это значит
подсчитывать SUM(B) / SUM(total_of_A)
только если сумма total_of_A
не является 0
потому что это приведет к делению на ноль исключений.
Работает так
case <check SUM(total_of_A)>
when <result of check is 0?>
then <output 0>
else <output the result of SUM(B) / SUM(total_of_A)>
end
В SQL Server
деление на ноль вызывает следующую ошибку:
Msg 8134, уровень 16, состояние 1, строка 1
Ошибка деления на ноль.
Итак case statement
использование для избежания таких случаев.
Во всяком случае, я думаю, что это неправильно, как value / 0
не является 0
, Мне больше нравится следующий чек:
SUM(B) / NULLIF(SUM(total_of_A), 0)
как короче и возвращается NULL
вместо.
Это читается следующим образом: если сумма столбца с именем total_of_A равна 0, то результатом этого оператора case является 0, в противном случае результатом этого оператора case является сумма столбца с именем b, деленная на сумму столбца с именем total_of_A