You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL计算累积占比时出现除以零错误,求解决方案

解决SQL除零错误(Division by zero)的方案

你的SQL触发除零错误的原因是:当某个grp + category分组内所有customers的值都≤10时,customers_adj会全为0,导致分母SUM(customers_adj) OVER (PARTITION BY grp, category)的计算结果为0,触发除法运算错误。

以下两种方案可以解决这个问题:

方案一:使用NULLIF处理分母

通过NULLIF将分母为0的情况转为NULL,此时除法结果会变为NULL,避免报错:

SELECT 
  GRP,  
  category, 
  price, 
  units, 
  CASE WHEN customers > 10 THEN customers ELSE 0 END AS customers_adj,
  1.00000 * (
    SUM(customers_adj) OVER(PARTITION BY grp, category ORDER BY 
        FIGURE DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    )) / NULLIF(SUM(customers_adj) OVER (PARTITION BY grp, category), 0) AS cum_max_price_cust
FROM 
  table_1

方案二:用CASE WHEN自定义除零场景的返回值

如果需要在除零时返回特定值(比如0)而非NULL,可以用CASE WHEN明确判断:

SELECT 
  GRP,  
  category, 
  price, 
  units, 
  CASE WHEN customers > 10 THEN customers ELSE 0 END AS customers_adj,
  CASE 
    WHEN SUM(customers_adj) OVER (PARTITION BY grp, category) = 0 THEN 0  -- 可根据业务需求改为NULL或其他值
    ELSE 1.00000 * (
      SUM(customers_adj) OVER(PARTITION BY grp, category ORDER BY 
          FIGURE DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
      )) / SUM(customers_adj) OVER (PARTITION BY grp, category) 
  END AS cum_max_price_cust
FROM 
  table_1

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:20:19