计算MySQL列中不同值的移动平均值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算MySQL列中不同值的移动平均值相关的知识,希望对你有一定的参考价值。
我有一个这样的数据集:
team date score
A 2011-05-01 50
A 2012-05-02 54
A 2013-05-03 51
A 2014-05-04 49
A 2015-05-05 59
B 2012-05-03 30
B 2013-05-04 35
B 2014-05-05 39
B 2015-05-06 47
B 2016-05-07 50
我想添加另一列MA3
,在其中我可以计算最近3天的分数移动平均值。棘手的一点是计算每个团队的MA。最终结果应该是这样的:
team date score MA3
A 2011-05-01 50 null
A 2012-05-02 54 null
A 2013-05-03 51 null
A 2014-05-04 49 51.66
A 2015-05-05 59 51.33
B 2012-05-03 30 null
B 2013-05-04 35 null
B 2014-05-05 39 null
B 2015-05-06 47 34.66
B 2016-05-07 50 40.33
如果那是一个团队,我会继续做:
SELECT team,
year,
AVG(score) OVER (ORDER BY date ASC ROWS 3 PRECEDING) AS MA3
FROM table
答案
您缺少PARTITION BY
子句:
SELECT team,
year,
AVG(score) OVER (
PARTITION BY team
ORDER BY date ASC ROWS 3 PRECEDING
) AS MA3
FROM table
请注意,无论窗口大小如何,都将始终进行平均计算。如果您希望窗口大小小于3,则平均值为null
,则可以这样操作:
SELECT team,
year,
CASE
WHEN count(*) OVER w <= 3 THEN null
ELSE AVG(score) OVER w
END AS MA3
FROM table
WINDOW w AS (PARTITION BY team ORDER BY date ASC ROWS 3 PRECEDING)
以上是关于计算MySQL列中不同值的移动平均值的主要内容,如果未能解决你的问题,请参考以下文章