mysql - 从 MySQL 获取最大不同值

标签 mysql max distinct

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

表:

<小时/>

ID |用户号 |名称 |得分

1 | 1 |姓名1 | 400

2 | 2 |姓名2 | 700

3 | 3 |姓名3 | 100

4 | 2 |姓名2 | 500

5 | 4 |名称4 | 800

6 | 3 |姓名3 | 200

7 | 1 |姓名1 | 500

8 | 4 |名称4 | 700

结果应该是:

<小时/>

ID |用户号 |名称 |得分

5 | 4 |名称4 | 800

2 | 2 |姓名2 | 700

7 | 1 |姓名1 | 500

怎样才能得到上面的结果。我正在使用 MySQL。

最佳答案

这可以通过派生表上的联接来完成,尽管您需要正确的索引才能使其高效

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

关于mysql - 从 MySQL 获取最大不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212169/

相关文章:

java - 如何从java中的类访问变量值

mysql - 在最大日期小于当前日期的组中选择最大日期

c# - 如何在数据行 [] 的列中找到最大值?

mysql查询: SELECT DISTINCT column1, GROUP BY column2

php - MySQL 中两列的不同值

mysql - 尝试使用 MySQL 协议(protocol)支持和 SphinxQL

c# - 带有参数的mysql odbc插入

MySQL选择具有最大ID并匹配其他条件的行

php - 不同的在sql查询中不起作用

c# - 从 MySQL 数据库中提取一个非平凡的对象