gpt4 book ai didi

mysql - SQL查询对相同数据的不同列具有不同的平均值

转载 作者:行者123 更新时间:2023-11-29 12:47:59 26 4
gpt4 key购买 nike

我正在处理的 SQL 挑战是构建一个查询来显示个人姓名及其在一列中 10 次数据迭代中的平均性能,以及在下一列中的 50 次数据迭代中的平均性能。当然按名称分组。迭代按顺序进行,因此个体过去 10 个的平均值将是该个体的 10 个最高 ID 号的平均分数。原始数据集如下所示:

ID, Name, Score
1, Joe, 10
2, Bob, 13
3, Joe, 9
4, Kim, 6
5, Rob, 8
6, Han, 9
7, Kim, 12

像这样的行大约有 1000 行,大约有 50 个名称。最终目标是运行一个返回如下内容的查询:

Name, AvgPast10, AvgPast50
Bob, 8, 10
Joe, 7, 9
Kim, 6, 10
Han, 9, 6
Rob, 7, 5

当我尝试这样做时,我意识到可能有不同的方法可以做到这一点。也许是 self 连接回到自身,也许是嵌套的选择语句。我尝试了一下,发现自己已经陷入了困境。另外,我的老板非常坚持查询优化。由于某种原因,他鄙视嵌套的 select 语句。如果我需要它们,那么我最好有一个令人信服的理由,或者至少对如何将优化构建到查询中有所了解。

最佳答案

诚然,这个使用了嵌套选择(或子查询):

SELECT Name, AVG(CASE WHEN Rank <= 10 THEN Score END) AvgPast10,
AVG(CASE WHEN Rank <= 50 THEN Score END) AvgPast50
FROM (
SELECT Name,
@rank := IF(@Name = Name, @rank+1, 1) as Rank,
@Name := Name, Score
FROM tbl
ORDER BY Name, ID DESC
) A
GROUP BY Name

查看我的 Demo 为了简单起见,使用 Past 3 和 Past 5。

关于mysql - SQL查询对相同数据的不同列具有不同的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25174488/

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