Redshift除以零益智游戏

cjr*_*ley 3 sql divide-by-zero vertica amazon-redshift

我用这段代码得到0除错:

CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1 * INT2 / DENOMINATOR)
ELSE 0
END AS RATIO
Run Code Online (Sandbox Code Playgroud)

但是,当我更改为以下代码时,它工作正常.

CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1) * INT2 / DENOMINATOR
ELSE 0
END AS RATIO
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解原因,以便将来可以避免这种情况吗?BTW,第一个样本在Vertica中运行.我实现了总结需要求和的东西而不是在求和之前进行计算是一种更好的编程实践.不过仍然很好奇.

Gor*_*off 11

我认为避免被零除的最好方法是使用nullif():

SUM(INT1 * INT2 / NULLIF(DENOMINATOR, 0))
Run Code Online (Sandbox Code Playgroud)

要么:

SUM(INT1) * INT2 / NULLIF(DENOMINATOR, 0)
Run Code Online (Sandbox Code Playgroud)

这回归NULL,我发现对于零除零情况更为明智.如果您愿意,可以添加COALESCE()get 0.