2017-05-08 334 views
1

我试图找出如何编写一个查询,将给我3个不同的列的平均值,所以我可以在图中填充它们。我所拥有的是一个程序,每超过5分钟就会用一个超声波传感器的当前水位向表中添加一条记录。因此对于我正在处理的当前传感器,有1000条记录。我想要做的是在图表中显示10个平均值,因此每个平均值将一起计算100个平均值。图形所需的3个平均列是深度,日期,时间。该表被命名为data_tank。任何帮助,这将不胜感激。PostgreSQL平均查询

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

+0

这有点令人困惑。你说你想在图中显示10个平均值,但是你需要3列进行平均。这听起来更像是你希望_one_列在*日期*加上*时间*的平均值。 –

+1

发布样本数据和预期的输出 –

+0

我赞赏你们都回应。我已经更新了该帖子,并链接到了相关表格的快照。正在显示20行,我正在做的图表将支持10个数据点。所以在这个例子中,每2行需要对tank_level进行平均。请忽略3列评论,对不起,这是令人困惑的。对于实际的项目,虽然我正在查看数千条记录,需要将这些记录拆分为相同行数的10个平均值。再次感谢你们。 – Derek

回答

0
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 
+0

我试着调整你发布的内容,试图完成什么。选择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

+0

@Derek编辑。不要总结任何行号。 –

+0

我猜我迷路了,就是说我们在你的例子中增加了2个数据点,但仍然只需要2个平均数字,你如何通过调整这个来调整组?我平均的行数永远不会是静态的。我试着用t(id,tank_level,job_id)作为(值(1,5,26),(2,7,26),(3,3,26),(4,4,26),(5 ,5,26),(6,6,26)),并通过(rn + 1)/ 3将组更改为组,并获得了3条记录 – Derek