2017-05-08 336 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