在使用OVER()子句时避免被零除错误,即使在使用nullif之后也是如此



我得到的错误是

遇到被零除错误。

我的代码看起来像:

Select A, B, C, nullif(100*count / sum(count) OVER (partition by A, B), 0) as Share

你知道为什么这会给我带来错误吗?

您希望nullif()围绕除法的分母,而不是围绕整个运算:

select a, b, c, 
100 * count / nullif(sum(count) over (partition by a, b), 0) as share
from ...

这样,如果窗口和返回0,则nullif()将其转换为null值,从而避免了零误差除法,并且除法的结果是null值。

附带说明:count是一个语言关键字,因此不是列名的好选择。

因为如果sum(count)返回0NULLIF应该围绕这个表达式,而不是整个内容:

Select A, B, C, 100*count / nullif(sum(count) OVER (partition by A, B), 0) as Share

相关内容

最新更新