使用此代码,我得到了除以 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 - Redshift 除以零谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670600/