使用PostgreSQL计算比例

时间:2014-03-04 20:06:06

标签: sql postgresql subquery aggregate-functions percentage

我在以下查询中得到以下结果:

select 
count(CASE WHEN u.terms='A' AND u.space='R' THEN 1 END) as yes_count,
count(CASE WHEN u.terms='C' AND u.space='R' THEN 1 END) as no_count,
c.col1,c.col2
from schema1.table1 as u, schema1.table2 cu,schema1.table3 c
WHERE cu.created_date > now()- interval '5 days'
AND cu.tale2id=u.table2id
AND cu.oneid=c.oneid
Group by c.col2,c.col1;

结果

yes_count | no_count | col1 | col2
23444     |    456   | sdfd | 90
4444      |    456   |ghj   |34

现在我需要编写另一个查询来计算proportion提供的no_count。以下是我试图做同样的查询:

select yes_count, no_count
     , count(no_count*100)/yes_count) as proportion of no_count
where col1 ='fgh' and col2= 34;

我无法正确地解决这个问题,我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

  

查询将计算no_count提供的比例。

SELECT *, no_count / (no_count + yes_count) AS no_count_ratio
FROM  (
   SELECT c.col1,c.col2
        , count(u.terms='A' AND u.space='R' OR NULL) AS yes_count
        , count(u.terms='C' AND u.space='R' OR NULL) AS no_count
   FROM   schema1.table1 u
   JOIN   schema1.table2 cu USING (tale2id)
   JOIN   schema1.table3 c  USING (oneid)
   WHERE  cu.created_date > now() - interval '5 days'
   GROUP  BY 1,2
   ) sub;
WHERE ....  -- to select specific rows ...

假设总数包含“是”而没有“且没有其他选项。” 如果你想要“百分比”乘以100 我将您的主查询放入子查询中以使其更容易,简化语法,但没有改变任何东西。仅将no_count_ratio添加到外部查询。