当分子而不是分母为0时,得到“除以零”错误

时间:2017-11-01 18:49:06

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

我在Redshift中有一个'除以0'的神秘感,它并非来自分母为0。

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

当我运行下面的代码(使用Postico查询Redshift)时,我得到了正确的结果,除了当“Flagged Sales”= 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"

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

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

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