gpt4 book ai didi

MySQL查询从表中提取两条信息

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

我有一个表来跟踪玩我的游戏的人的分数

userID |  game_level |      date_of_attempt        |  score
1 1 2014-02-07 19:29:00 2
1 2 2014-02-08 19:00:00 0
2 1 2014-03-03 11:11:04 4
... ... ... ...

我正在尝试编写一个查询,对于给定用户,该查询将告诉我他们每个 game_level 的累积分数以及他们在特定 game_level 上获得的最后 20 个分数的平均值(按 date_of_attempt 排序)

例如:

userID | game_level | sum of scores on game level |  average of last 20 level scores
1 1 26 4.5
1 2 152 13

是否可以在单个查询中完成这样的事情?我经常需要对多个 game_level 执行查询,并且我使用很长的子查询来计算出需要哪些级别,这让我认为单个查询会更好

最佳答案

MySQL 不支持分析函数,因此获取平均值比在其他 RDBMS 中更棘手。这里我用user-defined variables获得分组排名,然后测试结果以仅对最近 20 条记录进行平均:

SELECT   userID, game_level, SUM(score), x.avg
FROM my_table JOIN (
SELECT AVG(CASE WHEN (@rank := (CASE
WHEN t.userID = @userID
AND t.game_level = @gamelevel
THEN @rank + 1
ELSE 0
END) < 20 THEN score END) AS avg,
@userID := userID AS userID,
@game_level := game_level AS game_level
FROM my_table,
(SELECT @rank := @userID := @game_level := NULL) init
ORDER BY userID, game_level, date_of_attempt DESC
) x USING (userID, game_level)
GROUP BY userID, game_level

参见How to select the first/least/max row per group in SQL欲了解更多信息。

关于MySQL查询从表中提取两条信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22971691/

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