gpt4 book ai didi

mysql - 从 MySQL 获取最大不同值

转载 作者:行者123 更新时间:2023-11-29 12:32:58 25 4
gpt4 key购买 nike

我在数据库中有一个表。具有序列号(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com