2015-11-26 94 views
0

我想计算表A中的行与表B中的行的比率。如果我只需计算整个集合的比例,就很容易了,但我想按表B中存在的类别对它们进行分组。 表A和B通过主键(id)链接。从另一个表中划分另一个表并对结果进行分组

编辑:

我试过如下:

select 
    (select count(*) from class_a a left join football_players b on (b.id = a.id) group by age) 
    /
    (select count(*) from football_players group by age) 

但该集团通过命令不会在这里工作。

回答

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

0

这是:按行从football_players数量

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行数:DEMO

select age, 
(1-(select count(*) from tableA a where a.id=b.id)/count(*))*100 
from tableB b 
group by age 
+0

嗯,我想对我的问题的工作......这是不太相同的情况下..? – Jam

+0

让我看看你的表格,这会让事情变得更容易 – Walucas

+0

谢谢,贴出来.. – Jam

0

这应该回到你想要的。

+0

似乎我可以使用的东西,然而,年龄并不存在于class_a中,只有在football_players中。无论如何,这项工作会吗? – Jam

+0

@Jam:您的查询在两个表中都显示“age”,但未指定表名。你能否添加关于这两个表的更多细节,例子数据和预期结果? – dnoeth

+0

你们,那是我的错误..我不知道如何去做其他事情(参见我的表格和预期结果) – Jam

相关问题