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 - Fatal编程技术网

MySQL:选择具有特定竞赛项目数的用户数

MySQL:选择具有特定竞赛项目数的用户数,mysql,Mysql,我有以下三个(简化)表格用于竞赛申请: **user** user_id **contest** contest_id **contest_entry** contest_id user_id 有几个竞赛,每个用户可以参加一次竞赛(创建竞赛记录) 到目前为止已经有5场比赛,所以我想统计一下有多少用户参加了0、1、2、3、4或5场比赛。我正在寻找的格式示例如下: num_contests_entered num_users 0

我有以下三个(简化)表格用于竞赛申请:

**user**
user_id    

**contest**
contest_id

**contest_entry**
contest_id
user_id
有几个竞赛,每个用户可以参加一次竞赛(创建竞赛记录)

到目前为止已经有5场比赛,所以我想统计一下有多少用户参加了0、1、2、3、4或5场比赛。我正在寻找的格式示例如下:

num_contests_entered      num_users
0                         102
1                         87
2                         345
3                         254
4                         567
5                         489
我完全被实现这一点所需的SQL难住了,因此非常感谢您的帮助

最好的, 克里斯

编辑:为了澄清,我正在寻找的一个例子是

102 users entered 0 contests
87 users entered 1 contest
345 users entered 2 contests 
等等

你可以写:

SELECT num_contests_entered,
       COUNT(1) num_users
  FROM ( SELECT COUNT(ce.contest_id) num_contests_entered
           FROM user u
           LEFT
          OUTER
           JOIN contest_entry ce
             ON ce.user_id = u.user_id
          GROUP
             BY u.user_id
       ) t
 GROUP
    BY num_contests_entered
 ORDER
    BY num_contests_entered
;
子查询为每个用户查找他们参加的竞赛数量;外部查询根据该计数对用户进行分组,从而确定参加那么多比赛的用户数量


(免责声明:未经测试。)

@njk你说得对。嗯,克里斯,什么是0,1,2,3,4和5?修正了这个问题,我觉得有点模棱两可@njk好吧,你的小提琴表明它很管用!唯一缺少的部分(至于我的答案)是没有用户具有给定参与编号(在您的情况下为1和3)的行。这对我很有用,非常感谢!我现在将对它进行剖析,并了解一两件事:)@RaphaëlAlthaus我有时患有诵读困难症。