我得到的错误是
遇到被零除错误。
我的代码看起来像:
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)
返回0
。NULLIF
应该围绕这个表达式,而不是整个内容:
Select A, B, C, 100*count / nullif(sum(count) OVER (partition by A, B), 0) as Share