我在数据库中有一个表。具有序列号(用户 - 否)的用户(名称)可以多次播放。每次用户播放时,都会生成一个新的ID(Id),并将其与分数(Score)一起存储在数据库中。我想从表中获取前三个分数,其中每个用户只有最高分显示。
表:
结果应该是:
如何获得上述结果。我正在使用MySQL。
答案 0 :(得分:1)
这可以通过派生表上的连接来完成,但您需要正确的索引才能使其高效
select id, uid, name, score
from scores
join (select uid, max(score) as score from scores group by uid) t
using (uid, score)
order by score desc
limit 3;
+------+------+------+-------+
| id | uid | name | score |
+------+------+------+-------+
| 5 | 4 | n4 | 800 |
| 2 | 2 | n2 | 700 |
| 7 | 1 | n1 | 500 |
+------+------+------+-------+
3 rows in set (0.00 sec)
编辑:正确的索引是(uid,得分)。派生表没有索引,因此mysql会遍历最大分数结果并从主表中提取匹配的行。