Sql 将一个表上的计数与另一个表上的计数分开,并将结果分组
我试图计算表A中的行与表B中的行的比率。如果我只需要计算整个集合的比率,这将很容易,但我想按表B中存在的类别对它们进行分组。 表A和表B通过主键(id)链接 编辑: 我尝试了以下方法:Sql 将一个表上的计数与另一个表上的计数分开,并将结果分组,sql,postgresql,count,group-by,divide,Sql,Postgresql,Count,Group By,Divide,我试图计算表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
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)
但是group by命令在这里不起作用。在这里:
这是:
这将返回您想要的内容:
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
将
a类
的行数除以足球运动员的行数
这将返回您想要的:
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
将
a类
的行数除以足球运动员的行数
您需要外部联接,然后将外部联接表中的行数除以组中的总行数:
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
必须使用cast::numeric
才能获得小数,否则除法的结果将转换为整数
SQLFIDLE:您需要一个外部联接,然后将外部联接表中的行数除以组中的行总数:
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
必须使用cast::numeric
才能获得小数,否则除法的结果将转换为整数
SQLFiddle:似乎是我可以使用的东西,然而,年龄并不存在于a类,只存在于足球运动员中。。这行得通吗?@Jam:您的查询在两个表中都显示了
age
,但没有指定表名。你能给这两个表、示例数据和预期结果添加更多细节吗?是的,那是我的错误。。我不知道怎么做,因为(见我的表格和预期结果)似乎是我可以使用的东西,但是,a班不存在年龄,只有足球运动员。。这行得通吗?@Jam:您的查询在两个表中都显示了age
,但没有指定表名。你能给这两个表、示例数据和预期结果添加更多细节吗?是的,那是我的错误。。我不知道如何做它其他(见我的表格和预期结果)嗯,我试图在这方面的工作,为我的问题。。。情况不尽相同。答案中一定要包含你的代码,指向外部站点的链接会自动关闭。特别是SQLFiddle没有那么可靠。嗯,我试着解决我的问题。。。情况不尽相同。答案中一定要包含你的代码,指向外部站点的链接会自动关闭。尤其是SQLFiddle并不是那么可靠。