如何在postgresql中找到两列之间的百分比?

时间:2016-01-13 02:04:30

标签: sql database postgresql percentage

我的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`

非常感谢任何帮助和指导!

2 个答案:

答案 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)