如何在Postgresql中计算具有相同时间戳的值的平均值?

问题描述

我有下表:

日期 价值 平均
2021-04-07 18:00:00 5
2021-04-07 18:00:00 10
2021-04-07 18:02:00 5
2021-04-07 18:02:00 4
2021-04-07 18:03:00 5
2021-04-07 18:03:00 8

我想知道如何计算具有相同时间戳的值的平均值,如下所示:

日期 价值 平均
2021-04-07 18:00:00 5 7,5
2021-04-07 18:00:00 10 7,5
2021-04-07 18:02:00 5 4,5
2021-04-07 18:02:00 4 4,5
2021-04-07 18:03:00 5 6,5
2021-04-07 18:03:00 8 6,5

我还想知道在单独的表上计算平均值是否更容易,这样它们就不会重复,因为有不止一行具有相同的时间戳。 希望有人能帮我解决这个问题,提前致谢。

解决方法

在内部选择中,使用 avg 获取 group by date。然后 join date 等于内部选择 date 的记录。

SELECT t1.date,t2.value,t1.average 
FROM
 (SELECT date,AVG(Cast(value as Float)) as average
 FROM yourTable
 GROUP BY date) t1 JOIN yourTable t2 ON t1.date = t2.date

结果:dbfiddle

,
SELECT CAST(date AS DATE) as DateField,AVG(value) as avg_value
FROM MyTable
GROUP BY CAST(date AS DATE)
,

一个简单的查询:

SELECT date,AVG(value) as avg_value FROM MyTable GROUP BY date

,

使用窗口函数:

select t.*,avg(value) over (partition by date) as timestamp_average
from t;