在案例陈述中划分并且答案始终为零

时间:2017-06-14 22:49:02

标签: sql case divide-by-zero nullif

我试图在案例陈述中划分。我使用nullif来控制除零误差。但是,我的回答总是为0.我不确定我做错了什么。以下是声明:

sum(CASE WHEN aw.goalmet LIKE 'yes' THEN 1 ELSE 0 end)/nullif(sum(case WHEN aw.goalmet IN ('yes', 'no') then 1 else 0 end),0) AS 'Total Passing AIMSWEB2'

1 个答案:

答案 0 :(得分:1)

您可能正在使用进行整数除法的数据库(因此1/2 = 0而不是0.5)。所以,只需使用非整数:

(sum(CASE WHEN aw.goalmet LIKE 'yes' THEN 1.0 ELSE 0 end) /
 nullif(sum(case WHEN aw.goalmet IN ('yes', 'no') then 1 else 0 end), 0)
)

您可以将其简化为:

(sum(CASE WHEN aw.goalmet LIKE 'yes' THEN 1.0 ELSE 0 end) /
 sum(case WHEN aw.goalmet IN ('yes', 'no') then 1 end)
)

如果没有任何内容与分母匹配,那么无论如何它都是NULL

而且,如果你真的想要花哨而简单:

avg(case when aw.goalmet = 'yes' then 1.0
         when aw.goalmet = 'no'
    end) 

根本不需要任何分工。