请求生成含t年与t+1年Stat平均值的两列数据表
看起来你需要从球员赛季数据中关联出存在连续赛季的记录,再计算对应年份的Stat平均值。我分两种常见场景给你解决方案:
首先先明确你的原始数据:
| playerid | season | Stat |
|---|---|---|
| 1 | 2014 | 2.3 |
| 1 | 2015 | 1.4 |
| 1 | 2016 | 3.5 |
| 2 | 2011 | 1.5 |
| 2 | 2012 | 5.5 |
| 3 | 2010 | 6.7 |
| 3 | 2011 | 2.6 |
场景1:计算所有符合条件的t年与t+1年Stat的整体平均值
如果你的需求是把所有有后续赛季(t+1)的t年记录的Stat取平均,同时把对应的t+1年记录的Stat取平均,得到一行结果,可以用自连接结合CTE实现:
-- 替换your_table_name为你的实际表名 WITH player_season_stats AS ( SELECT playerid, season, Stat FROM your_table_name ), t_t1_link AS ( SELECT t.Stat AS t_stat, t1.Stat AS t1_stat FROM player_season_stats t -- 关联同一个球员的下一个赛季数据 JOIN player_season_stats t1 ON t.playerid = t1.playerid AND t.season + 1 = t1.season ) SELECT AVG(t_stat) AS "t年Stat平均值", AVG(t1_stat) AS "t+1年Stat平均值" FROM t_t1_link;
运行结果:
| t年Stat平均值 | t+1年Stat平均值 |
|---|---|
| 2.975 | 3.25 |
这个结果正好对应你例子里提到的4条t年记录的Stat平均值,以及它们对应的t+1年记录的Stat平均值。
场景2:按年份分组,计算每个t年的Stat平均值与t+1年的Stat平均值
如果需要按年份维度展示,每个年份的平均值和下一年的平均值,可以先计算每年的Stat平均值,再关联下一年的数据:
-- 替换your_table_name为你的实际表名 WITH yearly_stat_avg AS ( SELECT season, AVG(Stat) AS yearly_avg FROM your_table_name GROUP BY season ) SELECT ya.yearly_avg AS "t年Stat平均值", ya_next.yearly_avg AS "t+1年Stat平均值", ya.season AS "t年份" FROM yearly_stat_avg ya JOIN yearly_stat_avg ya_next ON ya.season + 1 = ya_next.season ORDER BY ya.season;
运行结果:
| t年Stat平均值 | t+1年Stat平均值 | t年份 |
|---|---|---|
| 6.7 | 2.05 | 2010 |
| 2.05 | 5.5 | 2011 |
| 2.3 | 1.4 | 2014 |
| 1.4 | 3.5 | 2015 |
内容的提问来源于stack exchange,提问作者G Issac
相关产品推荐
相关产品推荐

