【发布时间】:2018-05-12 08:32:10
【问题描述】:
我有一个包含分数的用户记录表(并且只需要获取成员用户)。我需要在这一年中为每个用户获取前 5 名的分数,平均分数并返回前 10 名用户。
注意:此外,用户必须至少有 5 个条目。
分数表:
user_id | score | date_submitted
1 99 2017-11-07 22:00:00
2 55 2017-10-33 11:33:35
1 12 2017-09-33 11:33:35
用户表
id | is_member
1 1
2 1
3 0
这是我目前所拥有的:
SELECT s.user_id,
(SELECT AVG(s.score) FROM score s2 WHERE s2.user_id = s.user_id ORDER BY score DESC LIMIT 5) gr
FROM score s, users u
WHERE u.id = s.user_id
AND u.is_member = 1
AND YEAR(s.date_submitted) = YEAR(CURDATE())
GROUP BY s.user_id
HAVING COUNT(*) >= 5
ORDER BY gr DESC LIMIT 10
这会返回:
1242 - 子查询返回多于 1 行
我知道这是子查询中的限制,我正在尝试弄清楚如何获取该用户的前 5 条记录。
【问题讨论】:
-
你可以运行子查询并检查记录
-
您能否添加更多示例数据或为两个表创建和插入查询以测试查询?这真的很有帮助。