【问题标题】:Getting 'divide by zero' error when numerator, not denominator is 0当分子而不是分母为 0 时出现“除以零”错误
【发布时间】:2018-04-14 04:10:06
【问题描述】:

我在 Redshift 中有一个“除以 0”之谜,它不是来自分母为 0。

我有两列都是小数:销售额总是 > 0,这是我的分母。 “标记的销售额”介于 0 和最大销售额之间。

当我运行下面的代码(使用 Postico 查询 Redshift)时,我得到了正确的结果,除了当“标记销售”=0 时,我希望结果为 0,而不是 NULL。
SELECT 
   NULLIF("Flagged Sales") / NULLIF(Sales,0)::decimal AS "% of Sales Flagged"
FROM Table1;

以下尝试在分子为 0 时获得 0 导致“除以零”错误:

CASE 
    WHEN (NULLIF("Flagged Sales",0) / NULLIF(Sales,0)::decimal) IS NULL THEN 0
    ELSE (NULLIF("Flagged Sales",0) / NULLIF(Sales,0)::decimal)
    END AS "% of Sales Flagged"

同理:

COALESCE((NULLIF("Flagged Sales") / NULLIF(Sales,0)::decimal)) AS "% of Sales Flagged"

任何想法为什么会发生这种情况?

【问题讨论】:

  • 您能否缩小到一小组可以重现此问题的数据并将其包含在此处?
  • 当我出现像这样的莫名其妙的错误时,我喜欢尽可能多地排除这个等式。我喜欢 Postico,但它本身并不是由 Postgres 的创建者制作的。我可能会建议仅针对此查询(在您调试它时)查看是否从psql 命令行获得相同的结果。我遇到过一些 GUI 妨碍我的情况。也许这是一个?
  • 不好意思,我可能还建议您添加一个WHERE 条件,让您缩小数据集(二分搜索)以找到有问题的行。
  • 你可以试试 where sales >0 并分享结果。
  • @venial-steps 请告诉我下面的代码是否适合您?

标签: sql postgresql null amazon-redshift divide-by-zero


【解决方案1】:

以下代码适用于标记销售和销售的所有组合

select COALESCE(("Flagged Sales" / NULLIF(Sales,0)),0) AS "% of Sales Flagged"
from (select 0 as "Flagged Sales", 0 as Sales) as a
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多