我有三个(简化的)表格用于竞赛申请:
**user**
user_id
**contest**
contest_id
**contest_entry**
contest_id
user_id
有几场比赛,每位用户可以参加一次比赛(创建一个contest_entry记录)。
到目前为止已有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
等。
答案 0 :(得分: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
;
子查询为每个用户查找他们输入的竞赛数量;外部查询按该计数对用户进行分组,从而确定进入那么多竞赛的用户数。
(免责声明:未经测试。)