【发布时间】: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