从MySQL获取Max-Distinct值

时间:2014-11-30 10:17:21

标签: mysql max distinct

我在数据库中有一个表。具有序列号(用户 - 否)的用户(名称)可以多次播放。每次用户播放时,都会生成一个新的ID(Id),并将其与分数(Score)一起存储在数据库中。我想从表中获取前三个分数,其中每个用户只有最高分显示。

表:


Id |用户 - 没有|名称|评分

1 | 1 | Name1 | 400

2 | 2 | Name2 | 700

3 | 3 | Name3 | 100

4 | 2 | Name2 | 500

5 | 4 | Name4 | 800

6 | 3 | Name3 | 200

7 | 1 | Name1 | 500

8 | 4 | Name4 | 700

结果应该是:


Id |用户 - 没有|名称|评分

5 | 4 | Name4 | 800

2 | 2 | Name2 | 700

7 | 1 | Name1 | 500

如何获得上述结果。我正在使用MySQL。

1 个答案:

答案 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会遍历最大分数结果并从主表中提取匹配的行。