将一个表上的计数除以另一个表并对结果进行分组

时间:2015-11-26 18:48:25

标签: sql postgresql count group-by divide

我正在尝试计算表A中的行与表B中的行的比率。如果我只需要计算整个集合的比率,这本来很容易,但我想将它们按存在的类别进行分组在表B中。 表A和B通过主键(id)链接。

编辑:

我尝试了以下内容:

{{1}}

但是group by命令在这里不起作用。

3 个答案:

答案 0 :(得分:0)

这是:DEMO

.image{
  width: 40%;
  border: 1px solid #ffffff;
}

答案 1 :(得分:0)

这应该返回你想要的东西:

SELECT p.age, 100 * COUNT(c.id) / COUNT(p.id)
FROM football_players AS p
LEFT JOIN class AS c
  ON p.id = c.id
GROUP BY p.age

class_a的行数除以football_players的行数。

答案 2 :(得分:0)

您需要一个外部联接,然后将外部联接表中的行数除以组中的总行数:

select fp.age, 
       (count(cl.id)::numeric / count(*)::numeric) * 100 as ration,
       count(cl.id) as class_count, 
       count(*) as age_count
from football_players fp
  left join class cl on fp.id = cl.id
group by fp.age  

转换::numeric是获取小数值所必需的,否则除法的结果将转换为整数。

SQLFiddle:http://sqlfiddle.com/#!15/3373c/3