SQL查询异常:无法获取水手队各年份平均体重与身高
问题分析与解决
你的SQL逻辑框架没问题,但有两个关键问题会导致结果不符合预期:
- 原语句没按年份从近到远排序,结果是数据库默认的无序状态,不是你要的倒序
- 如果
PlayersAndTeams表存在同一球员同一年份的重复记录(比如球员多次被关联到同一年的球队),会干扰平均值计算,甚至可能让分组后出现异常(虽然GROUP BY yearID理论上会合并同一年份,但重复行会拉偏聚合结果)
修正后的SQL语句
SELECT yearID, AVG(weight) AS AverageWeight, AVG(height) AS AverageHeight FROM ( -- 先去重同一球员同一年份的重复记录 SELECT DISTINCT yearID, playerID, weight, height FROM [TWalls_W23].[dbo].[PlayersAndTeams] WHERE teamID = 'SEA' ) AS UniquePlayerYears GROUP BY yearID ORDER BY yearID DESC; -- 按年份从近到远排序
简化方案(如果无重复数据)
要是确认表中没有同球员同年份的重复数据,直接在原语句末尾加排序即可:
SELECT yearID, AVG(weight) as AverageWeight, AVG(height) as AverageHeight FROM [TWalls_W23].[dbo].[PlayersAndTeams] where teamID = 'SEA' group by yearID ORDER BY yearID DESC;
额外检查点
如果还是出现非唯一年份的结果,要确认yearID的数据类型:如果是字符串类型,得保证格式统一(比如没有带空格、多余字符),否则会被当作不同年份分组。
内容的提问来源于stack exchange,提问作者Tim W
相关产品推荐
相关产品推荐

