我想列出过去24小时内的前10名用户,其中WPM(每分钟单词数)值最高。如果用户有多个高分,则只应显示最高分。我做到了:

SELECT results.*, users.username
FROM results
JOIN users
ON (results.user_id = users.id)
WHERE results.user_id != 0 AND results.created >= DATE_SUB(NOW(),INTERVAL 24 HOUR)
GROUP BY results.user_id
ORDER BY wpm DESC LIMIT 10

我的问题是,我的代码不能获取最高的值。例如:
用户x有2个高分,但不是为此用户选择wpm最高的行,而是选择值较低的行。如果我使用“MAX(results.wpm)”我得到最高的wpm这很好,但我也需要这一行的按键。我的问题是,即使我获取了正确的用户,我也没有收到该用户的正确行(使该用户进入前10名的行)。
这是结果表:
id |用户id | wpm |按键|计数|正确字|
已创建的“错误”字数

最佳答案

(编辑答案,因为我们不能在子查询中使用限制)
这是另一个尝试。。。

SELECT users.username, R1.*
FROM users
JOIN results R1 ON users.userId = R1.userId
JOIN (SELECT userId, MAX(wpm) AS wpm FROM results GROUP BY userId) R2 ON R2.wpm = R1.wpm AND R2.userId = R1.userId
WHERE R1.user_id != 0 AND R1.created >= DATE_SUB(NOW(),INTERVAL 24 HOUR)
ORDER BY R1.wpm DESC LIMIT 10;

我们使用Max()来首先隔离每个用户ID的最大WPM,然后用这个子集加入结果表来获得完整的行信息。

10-04 10:36