【问题标题】:PostgreSQL Avg QueryPostgreSQL 平均查询
【发布时间】:2017-05-09 03:00:54
【问题描述】:

我试图弄清楚如何编写一个查询,该查询将为我提供 3 个不同列的平均值,以便我可以将它们填充到图表中。我所拥有的是一个程序,它每 5 分钟在一张表中添加一条记录,其中包含来自超声波传感器的当前水位。因此,对于我正在研究的当前传感器,有 1000 条记录。我想要做的是在图表中显示 10 个平均值,因此每个平均值将是 100 条记录的平均值。图表所需的 3 个平均列是深度、日期、时间。该表名为 data_tank。对此的任何帮助将不胜感激。

让我们忘记这 3 列吧,我现在只需要获取 tank_level 的平均值。所以在图片中有 20 行,我想显示的最大数据点是 10,所以每 2 行需要一起平均。

【问题讨论】:

  • 这有点令人困惑。您说您想在图表中显示 10 个平均值,但您需要对 3 列进行平均。这听起来更像是您想要 one 列平均超过 date 加上 time
  • 发布样本数据和预期输出
  • 感谢大家的回复。我已经更新了帖子,其中包含指向相关表格快照的链接。正在显示 20 行,我正在做的图表将支持 10 个数据点。因此,在此示例中,需要对 tank_level 的每 2 行进行平均。请忽略 3 列评论,对不起,它令人困惑。对于实际项目,尽管我正在查看数千条记录,这些记录需要分成 10 个相等行数的平均值。再次感谢大家。
  • 请阅读meta.stackoverflow.com/questions/285551/… 和接受的答案

标签: postgresql


【解决方案1】:
with t (id, tank_level, job_id) as (values (1,1,26),(2,2,26),(3,3,26),(4,4,26))
select avg(tank_level)
from (
    select row_number() over (order by id) as rn, tank_level
    from t
    where job_id = 26
) s
group by (rn + 1)/ 2
;
        avg         
--------------------
 1.5000000000000000
 3.5000000000000000

【讨论】:

  • 我尝试将您发布的内容调整为我想要完成的内容。 Select avg(tank_level) FROM data_tanksensor WHERE job_id = 26 group by (id + ((Select count(*) FROM data_tanksensor WHERE job_id = 26) / 10)) 但结果远远超过 10 条记录。总“计数”为 1002。任何想法为什么它显示超过 10 条记录
  • @Derek 已编辑。不要对行号求和。
  • 我想我迷路的地方是说我们在您的示例中再添加 2 个数据点,但仍然只需要 2 个平均数,您如何更改组以对此进行调整?我平均的行数从来都不是静态的。我尝试使用 t (id, tank_level, job_id) 作为 (values (1,5,26),(2,7,26),(3,3,26),(4,4,26),(5 ,5,26),(6,6,26)) 并将 group by 更改为 - group by (rn + 1)/ 3 并获得 3 条记录
  • 好吧,我发现将 group by 更改为 - group by (rn + 2)/ 3 并且结果正确,但我仍然如何调整它以适应不知道的记录数用户尝试创建历史图表。我假设我必须使用 count 来获取当前的行数?并且不会使用“with”语句,因为它直接来自表,不需要创建另一个对吗?
  • select avg(tank_level) from ( select row_number() over (order by id) as rn, tank_level from data_tanksensor where job_id = 26 ) s group by (rn + ((Select count(*)/10 From data_tanksensor where job_id = 26) - 1))/ (Select count(*)/10 From data_tanksensor where job_id = 26) ; 您觉得这是否正确?在选择平均值之前,我得到了 11 条记录,此 job_id 的总记录数为 1002。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多