Mas*_*ldo 5 sql postgresql average
我有一个包含以下(相关)列的表:id_mi,日期和值。我想使用y轴的“值”列中的值和x轴中的日期来构建图形,但是由于它们很多,我希望图形上的点是X行的平均值。
假设本例中X = 10:
我想做的是获取表中的前10个值,计算平均值并将其存储在一行中,然后下一行将包含11到20的平均值,依此类推。
基本上,我需要在具有“值”列平均值的单个行中“压缩” 10行。
我正在使用Postgres 9.2
您可以使用窗口函数来做到这一点:
select avg(value) over (order by date
rows between 9 preceding and current row) as MovingAvg10
from t;
Run Code Online (Sandbox Code Playgroud)
如果您想确保从第 10 行开始,您可以执行以下操作:
select (case when row_number() over (order by date) >= 10
then avg(value) over (order by date
rows between 9 preceding and current row
)
end) as MovingAvg10
from t;
Run Code Online (Sandbox Code Playgroud)
编辑:
您修改后的问题更容易:
select ((seqnum - 1) / 10) as whichgroup, avg(value)
from (select row_number() over (order by date) as seqnum, t.*
from table t
) t
group by ((seqnum - 1) / 10)
order by 1;
Run Code Online (Sandbox Code Playgroud)
Postgres 进行整数除法,但如果你想明确一点,你可以这样做: trunc((seqnum - 1) / 10)获取组号。
| 归档时间: |
|
| 查看次数: |
947 次 |
| 最近记录: |