MySQL移动平均给出错误的结果

时间:2020-06-06 01:35:37

标签: mysql

我正在使用MySQL 7.3

我已经根据Stackoverflow here的需求调整了另一个答案,但是无法正常工作。我想计算NFL球员的幻想得分的滚动(移动)平均值。

我认为问题可能在于数据不是按Player顺序在数据库中,而是按Game_ID顺序在数据库中。.但我不知道。它仅计算出每个玩家的5个游戏滚动平均值。

该表具有以下这些列:玩家,游戏ID,日期和DK_Total_FP,其中DK_Total_FP是在单场比赛中获得的幻想分。

这是我的查询

(x**2).sum()/len(x)

尽管此数据按播放器顺序显示数据(用于测试,而无需我提供100条线)

select
rnk_curr.Date, rnk_curr.Player,rnk_curr.Game_ID, ROUND(avg(rnk_prev5.DK_Total_FP),2) AS "5 match rolling Av",rnk_curr.DK_Total_FP
from
(
select Date,Player,Game_ID,DK_Total_FP,
@row_num := if(@lag = Game_ID, @row_num + 1,
               if(@lag := Game_ID, 1, 1)) as row_num
from nfl_stats    

cross join ( select @row_num := 1, @lag := null ) params
order by Player,Game_ID
) rnk_curr
inner join
(
select date, Player, DK_Total_FP, 
@row_num := if(@lag = Game_ID, @row_num + 1,
               if(@lag := Game_ID, 1, 1)) as row_num
from nfl_stats   
cross join ( select @row_num := 1, @lag := null ) params
order by Player, Game_ID
) rnk_prev5
on  rnk_curr.Player = rnk_prev5.Player
and rnk_prev5.row_num - 1  between rnk_curr.row_num - 6 and rnk_curr.row_num
group by Game_ID
order by Player,Date DESC

1 个答案:

答案 0 :(得分:0)

对于8之前的MySQL版本,请考虑以下内容:

  plot for [i=1:56] filename(i) u 1:2:3 with points pt 5 lc palette, \
       'filename.dat' u 1:2 with lines

这种问题在MySQL 8+中得到了大大简化