基于两个运动员数据表的列合并、分组求平均与分组求最小值操作
没问题,我来帮你一步步完成这几个数据表操作!
第一步:合并两张运动员数据表
首先我们要把2016和2017年的运动员数据合并成一个完整的数据集,因为两张表的字段完全一致,用UNION ALL就能轻松实现:
SELECT Name, Position, 40_dash, Year, Overall FROM 2016Athletes UNION ALL SELECT Name, Position, 40_dash, Year, Overall FROM 2017Athletes
这里选择
UNION ALL而非UNION,是因为它不会自动去重(两年的运动员基本不会有完全重复的记录),执行效率也更高;如果你的数据里存在重复项,可以换成UNION来自动去重。
第二步:按位置分组计算统计值
基于合并后的数据集,我们可以按Position分组,计算每个位置的平均40码冲刺时间和最快(最小)40码冲刺时间。注意要过滤掉40_dash为NULL的记录(比如示例里的Corey Davis),避免影响统计结果:
SELECT Position, ROUND(AVG(40_dash), 2) AS avg_40_dash, -- 保留两位小数的平均值 MIN(40_dash) AS min_40_dash -- 最快冲刺时间 FROM ( -- 先嵌套合并两张表的语句 SELECT Name, Position, 40_dash, Year, Overall FROM 2016Athletes UNION ALL SELECT Name, Position, 40_dash, Year, Overall FROM 2017Athletes ) AS CombinedAthletes WHERE 40_dash IS NOT NULL -- 排除无冲刺数据的记录 GROUP BY Position ORDER BY avg_40_dash; -- 可选:按平均时间排序,直观对比位置间的速度差异
如果后续需要反复使用合并后的数据集,也可以先创建一个视图方便调用:
-- 创建合并视图 CREATE VIEW CombinedAthletes AS SELECT Name, Position, 40_dash, Year, Overall FROM 2016Athletes UNION ALL SELECT Name, Position, 40_dash, Year, Overall FROM 2017Athletes; -- 直接用视图统计 SELECT Position, ROUND(AVG(40_dash), 2) AS avg_40_dash, MIN(40_dash) AS min_40_dash FROM CombinedAthletes WHERE 40_dash IS NOT NULL GROUP BY Position;
比如从你的示例数据来看,CB位置的最快冲刺时间会是Jalen Ramsey的4.41,RB组的平均时间则是(4.47+4.51)/2=4.49左右,完全符合预期。
内容的提问来源于stack exchange,提问作者Nick Bohl
相关产品推荐
相关产品推荐

