在mySql中获取不同计数的计数
我有两张表,一张是团队的,一张是球员的,我想找出的是总人数表,换句话说,我想计算有2名成员的团队总数,以及有3名成员的团队总数,等等 下面是数据库结构 (侧边栏问题:我是这里的新手:有没有更好的方法发布SQL?) 我想要的是计算团队规模 我希望看到以下输出在mySql中获取不同计数的计数,mysql,count,distinct,Mysql,Count,Distinct,我有两张表,一张是团队的,一张是球员的,我想找出的是总人数表,换句话说,我想计算有2名成员的团队总数,以及有3名成员的团队总数,等等 下面是数据库结构 (侧边栏问题:我是这里的新手:有没有更好的方法发布SQL?) 我想要的是计算团队规模 我希望看到以下输出 Team_Size Count 1 1 2 2 4 1 最简单的方法可能是: select team_count, count(*) from (select count(*) tea
Team_Size Count
1 1
2 2
4 1
最简单的方法可能是:
select team_count, count(*) from
(select count(*) team_count from players group by team_id) sq
group by team_count
(虽然这不包括没有球员的球队。)
SQLFIDLE。首先,您需要团队规模:
select t.id as teamId, count(p.id) as teamSize
from
`Teams` as t
left join `Players` as p on t.id = p.teamId
group by
t.id;
请注意,这将返回零玩家的团队。如果您不想这样做,请使用内部联接
而不是左联接
现在,将此查询用作最终查询的行源:
select teamSize, count(teamId)
from (
select t.id as teamId, count(p.id) as teamSize
from
`Teams` as t
left join `Players` as p on t.id = p.teamId
group by
t.id) as a
group by teamSize;
希望这有帮助
还有一件事 如果您有大数据集,此查询可能会挂起。因此,最好创建一个临时表,为其编制索引,并在临时表上运行查询:
drop table if exists temp_teamSize;
create temporary table temp_teamSize
select t.id as teamId, count(p.id) as teamSize
from
`Teams` as t
left join `Players` as p on t.id = p.teamId
group by
t.id;
alter table temp_teamSize
add unique index idx_teamId(teamId),
add index idx_teamSize(teamSize);
select teamSize, count(teamId)
from temp_teamSize
group by teamSize;
这是发布SQL的好方法。你也可以在这里设置一个演示(除了在这里发布相关代码)+1这是我在过去几个月里看到的最清晰的问题之一
drop table if exists temp_teamSize;
create temporary table temp_teamSize
select t.id as teamId, count(p.id) as teamSize
from
`Teams` as t
left join `Players` as p on t.id = p.teamId
group by
t.id;
alter table temp_teamSize
add unique index idx_teamId(teamId),
add index idx_teamSize(teamSize);
select teamSize, count(teamId)
from temp_teamSize
group by teamSize;