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 

ETC..

4

1 回答 1

2

你可以写:

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
;

子查询为每个用户找到他们参加了多少场比赛;外部查询按该计数对用户进行分组,从而确定参加这么多比赛的用户数量。

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

于 2012-10-05T15:54:24.763 回答