gpt4 book ai didi

SQL 每隔 X 行对一列执行 AVG

转载 作者:行者123 更新时间:2023-11-29 11:29:26 29 4
gpt4 key购买 nike

我有一个包含以下(相关)列的表: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;

如果你想确定你从第 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;

编辑:

修改后的问题要简单得多:

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;

Postgres 做整数除法,但如果你想明确一点,你可以这样做:trunc((seqnum - 1)/10) 来获取组号。

关于SQL 每隔 X 行对一列执行 AVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21429627/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com