gpt4 book ai didi

MySQL 为每个 user_id 选择 max 并获取其他一些字段

转载 作者:行者123 更新时间:2023-11-29 07:10:26 27 4
gpt4 key购买 nike

假设我们有一张 table :

+----+---------+-------+--------+
| id | user_id | score | errors |
+----+---------+-------+--------+
| 1 | 123 | 50 | 12 |
| 2 | 123 | 55 | 7 |
| 3 | 444 | 90 | 1 |
| 4 | 555 | 78 | 2 |
| 5 | 123 | 50 | 0 |
+----+---------+-------+--------+

如何选择 3 个具有 MAX 分数且这些 MAX 分数有错误的用户?我希望得到 ids:3、4 和 5

附言我使用启用了 only_full_group_by 的 MySql

更新:我必须获得每个用户的最高分数以及确切的字段错误(与该用户的最高分数相关)

答案:可以使用以下查询简单地完成此操作。但如果一个用户有两个相同的 MAX 分数(例如用户 123 有 2 条分数 = 50 的记录),则会为该用户返回 2 条记录。在这里我们可以只保留最后一条记录(例如使用 PHP 或其他语言按 user_id 进行索引)

SELECT t1.user_id, max_score, errors
FROM tbl t1 JOIN (
SELECT max(score) AS max_score, user_id
FROM tbl
GROUP BY user_id
) t2 ON t1.user_id = t2.user_id AND t1.score = t2.max_score;

最佳答案

这只是另一个角度。首先根据每个 user_id 的分数按降序排列给出排名/row_number。然后我们可以选择rank/row_number 值为1 的行。

查询

SELECT t.id, t.user_id, t.score, t.errors FROM(
SELECT id, user_id, score, errors,
(
CASE user_id WHEN @curA
THEN @curRow := @curRow + 1
ELSE @curRow := 1 AND @curA := user_id END
) AS rn
FROM tblScore t,
(SELECT @curRow := 0, @curA := '') r
ORDER BY user_id, score DESC
)t
WHERE t.rn = 1
ORDER BY t.score DESC;

SQL Fiddle Demo

关于MySQL 为每个 user_id 选择 max 并获取其他一些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39991782/

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