这段代码使我被0除以错误:
CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1 * INT2 / DENOMINATOR)
ELSE 0
END AS RATIO
但是,当我更改为以下代码时,它起作用了。
CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1) * INT2 / DENOMINATOR
ELSE 0
END AS RATIO
有人可以帮助我理解原因,以便将来避免这种情况吗?顺便说一句,第一个样本在Vertica工作。我认识到只求和而不是在求和之前进行计算是一种更好的编程习惯。但是仍然很好奇。
最佳答案
我认为避免被零除的最好方法是使用nullif()
:
SUM(INT1 * INT2 / NULLIF(DENOMINATOR, 0))
或者:
SUM(INT1) * INT2 / NULLIF(DENOMINATOR, 0)
这将返回
NULL
,我发现它对于被零除的情况更为明智。如果愿意,可以添加COALESCE()
以获得0
。关于sql - 红移除以零拼图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46670600/