gpt4 book ai didi

mysql - 获取显示每年 MYSQL 找到的平均值的行列表

转载 作者:行者123 更新时间:2023-11-29 21:06:05 32 4
gpt4 key购买 nike

所以我搜索并发现了很多与我类似的问题,例如 MYSQL - get a row for each year, with total sum for each month但我一直在寻找不同的方式。我使用 Lahman 数据库,每年根据 WAR 查找排名前十的玩家。然后我对这些球员的年龄进行平均,得出该赛季的平均年龄。我每年都尝试这样做,但我一直不知道如何做到这一点。

SELECT AVG(t.age) As AverageAge, w.yearID
FROM (SELECT w.playerID, w.age
From war_batting w, Master m
WHERE w.playerID = m.playerID AND w.yearID = 2012
ORDER by w.WAR desc
LIMIT 10) t,
war_batting w;

这显示了该赛季前 10 名球员的平均水平,因此我希望每个赛季都这样做。在我链接到的帖子中,我看到他们为他们需要的每个值都这样做,但我正在寻找一种不涉及近 150 年重复相同代码的方法。我以前用 Java 和 C++ 编程过,所以很自然地我正在寻找一种方法来循环我所拥有的内容,并不断向年份 ID 添加 1 直到当前年份。我正在努力了解如何做到这一点。上面的代码还返回yearID为2004年而不是2012年,但我对自己解决这个问题的能力更有信心,因为我很确定我在其他测试中已经做到了。另外,如果当我第一次发布此内容时代码块表现不佳,我会尝试修复它,因为这是我在这里发布的第一篇文章。

最佳答案

您没有从 master 表中选择任何内容,因此无需加入它。

尝试以下查询。它有一个内部查询,使用用户定义的变量根据 WAR 降序排名。然后外部查询只查看<= 10的排名,然后按yearID分组时进行平均。

SELECT AVG(T.age) AS AverageAge, T.yearID
FROM
(SELECT w.playerID, w.age, w.yearID,
CASE WHEN @prev_year = yearID THEN @rank := @rank+1
ELSE @rank:=1
END as rank,
@prev_year := yearID
FROM war_batting w
ORDER BY yearID ASC, WAR DESC
)T
WHERE T.rank <= 10
GROUP BY T.yearID

sqlfiddle

这样,您只需将 ORDER BY T.yearID DESCORDER BY T.yearID ASC 添加到查询末尾即可获取所有结果,而无需执行150 年来每年都使用相同的代码。

关于mysql - 获取显示每年 MYSQL 找到的平均值的行列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36816075/

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