【问题标题】:How to calculate average of values with the same timestamp in Postgresql?如何在 Postgresql 中计算具有相同时间戳的值的平均值?
【发布时间】:2021-05-03 06:14:01
【问题描述】:

我有下表:

date value Average
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

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

date value Average
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

我还想知道在单独的表上计算平均值是否更容易,这样它们就不会重复,因为有不止一行具有相同的时间戳。 希望有人可以帮助我,在此先感谢。

【问题讨论】:

标签: sql postgresql average sql-timestamp


【解决方案1】:

在内部选择中,使用group by date 获取avg。然后joindate等于内部选择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

【讨论】:

    【解决方案2】:

    一个简单的查询:

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

    【讨论】:

      【解决方案3】:
      SELECT CAST(date AS DATE) as DateField, AVG(value) as avg_value
      FROM MyTable
      GROUP BY CAST(date AS DATE)
      

      【讨论】:

        【解决方案4】:

        使用窗口函数:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多