【问题标题】:Divide by zero error encountered when using window function sum使用窗函数 sum 遇到除以零错误
【发布时间】:2021-08-05 01:48:33
【问题描述】:

在 SQL Server 中运行以下查询时出现错误:

遇到除以零错误。

select ID, CID, PTYPE, GW,PPE
    , payPercentage = SUM(GW) * 100.0 / SUM(SUM(GW)) OVER (partition by ID, PPE)
from pw_part
where ID ='001014055'
group by ID,CID,PPE,PTYPE,GW

payPercentage=SUM(GW) * 100.0 / SUM(SUM(GW)) OVER (partition by ID, PPE) 导致错误

如果我将 SUM 更改为

ISNULL (SUM(gross_wages) * 100.0 / NULLIF(SUM(SUM(gross_wages)),0),0) OVER (partition by ssn, pay_period_ending)) as pctg

我遇到以下错误

函数“ISNULL”不是有效的窗口函数,不能与 OVER 子句一起使用。

提前致谢

【问题讨论】:

  • 窗口函数规范包括over( partition by ... order by ... rows between ...),并在最后一个括号之后结束。将所有这些文本放在nullif 的第一个参数中:nullif(sum(..) over(...), 0)
  • NULLIF(SUM(gw) * 100.0 / (SUM(SUM(gw)) OVER (partition by id, ppe)),0) as pctg - 这给了我“除以零错误遇到" 错误
  • 不,您将单笔总工资除以总工资。你需要nullif分母,所以ifnull(sum(gw) / /*Should be NULLed for zero*/nullif(sum(sum(gw)) over(), 0), 0)
  • 它说 - ['ifnull' 不是公认的内置函数名] - 我在 sqlserver 上运行它
  • NM... 明白了... 它是 NULL ... 谢谢您的帮助... 这有效 .... isnull(SUM(GW) * 100.0 / nullif(SUM (SUM(GW)) OVER (partition by ID, PPW), 0), 0) as pctg

标签: sql sql-server tsql


【解决方案1】:

分母中只需要nullif()

SUM(GW) * 100.0 / NULLIF(SUM(SUM(GW)) OVER (partition by ID, PPE), 0) as percentage

事实上,您不希望在 分子 中出现 NULLIF(),因为这可能会返回真正应该是 0NULL 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多