【问题标题】:Trying to divide the columns and it's returning error division by zero in SQL尝试划分列,它在 SQL 中返回除以零的错误
【发布时间】:2022-11-18 02:55:47
【问题描述】:

我有 sql 查询,它将计算累计总和等。下面是查询

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
    ))/ SUM(customers_adj) OVER (PARTITION BY grp, category) AS cum_max_price_cust
FROM 
  table_1

问题出在最后一列。它作为 SQL 错误 [100051] [22012] 返回错误:除以零。谁能帮我这个?

【问题讨论】:

  • 是否有 sum(customers_adj) OVER (partition by grp, category) = 0 的行?
  • 1.00000 *( SUM(customers_adj) OVER(PARTITION BY grp, category ORDER BY FIGURE DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )) 包含一些 0
  • 那么当值为零时你希望发生什么?
  • 只需在构造时创建一个案例: SELECT...CASE yourValueThatCouldBeZero WHEN 0 THEN valueIfItsZero ELSE something/yourValueThatCouldBeZero END...

标签: sql snowflake-cloud-data-platform mysql-error-1064 snowflake-schema


【解决方案1】:

您可以使用 DIV0。当除数为 0 时它返回 0(而不是报告错误)。

SELECT 
  GRP,  
  category, 
  price, 
  units, 
  CASE WHEN customers > 10 THEN customers ELSE 0 END AS customers_adj,
  1.00000 * DIV0( (
    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) ) AS cum_max_price_cust
FROM 
  table_1;

https://docs.snowflake.com/en/sql-reference/functions/div0.html

【讨论】:

    【解决方案2】:

    你需要这个:

    Select dividend / NULLIF(divisor, 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      相关资源
      最近更新 更多