gpt4 book ai didi

Mysql:如何为排名列表选择最近 24 小时的前 10 名用户(并避免多个用户条目)

转载 作者:行者123 更新时间:2023-11-29 00:53:06 24 4
gpt4 key购买 nike

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

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 | user_id | wpm | keystrokes | count_correct_words | count_wrong_words | created

最佳答案

(编辑答案,因为我们不能在子查询中使用 LIMIT)

这是另一个尝试......

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() 首先隔离每个 user_id 的最大 wpm,然后将 Results 表与该子集进行内部连接以获得完整的行信息。

关于Mysql:如何为排名列表选择最近 24 小时的前 10 名用户(并避免多个用户条目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7432784/

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