我的SELECT语句中的两个参数是:
count(product_code.code) as codes_allocated
count(case when product_code.taken='TRUE' then product_code.taken end) as codes_claimed
我想在我的select语句中添加一个参数,该参数接受codes_claimed并将其除以codes_allocated以获取所声明代码的百分比。
我尝试过很多东西,但总是得到错误:
错误:除以零
查询失败。
我最近的尝试使用了以下内容:
(count(case when core_isvcode.reserved='TRUE' then core_isvcode.reserved end)::decimal / count(core_isvcode.code)::decimal)*100 as Percent_redeemed`
非常感谢任何帮助和指导!
答案 0 :(得分:1)
为什么不包含CASE
来验证count(core_isvcode.code) > 0
CASE WHEN count(core_isvcode.code) > 0 THEN
(count(case when core_isvcode.reserved='TRUE' then core_isvcode.reserved end)::decimal
/ count(core_isvcode.code)::decimal)*100
ELSE NULL
END as Percent_redeemed
答案 1 :(得分:0)
我认为nullif()
通常是最简单的方法:
(count(case when core_isvcode.reserved='TRUE' then core_isvcode.reserved end)::decimal / nullif(count(core_isvcode.code)::decimal))*100 as Percent_redeemed
但是,我认为avg()
对于此计算更简单:
avg(case when core_isvcode.reserved = 'TRUE' then 100.0
when core_isvcode.reserved is null then NULL
else 0.0
end)