Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mySql中获取不同计数的计数_Mysql_Count_Distinct - Fatal编程技术网

在mySql中获取不同计数的计数

在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

我有两张表,一张是团队的,一张是球员的,我想找出的是总人数表,换句话说,我想计算有2名成员的团队总数,以及有3名成员的团队总数,等等

下面是数据库结构

(侧边栏问题:我是这里的新手:有没有更好的方法发布SQL?)

我想要的是计算团队规模

我希望看到以下输出

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;