这段代码使我被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/

10-10 08:31