我有一個包含以下(相關)列的表:id_mi,日期和值。 我想使用y軸中的「值」列中的值和x軸中的日期來構建圖表,但由於它們很多,我希望圖表上的點是X行的平均值。SQL每隔X行執行一列AVG
假設X = 10這個例子:
我試圖做的是拿到第10個值在我的表,計算平均值並將其存儲在一排,比下面一行將包含從11到20的值的平均值等等。
基本上我需要「壓縮」10行中的一個具有「值」列的平均值的行。
我使用的是Postgres 9.2
我有一個包含以下(相關)列的表:id_mi,日期和值。 我想使用y軸中的「值」列中的值和x軸中的日期來構建圖表,但由於它們很多,我希望圖表上的點是X行的平均值。SQL每隔X行執行一列AVG
假設X = 10這個例子:
我試圖做的是拿到第10個值在我的表,計算平均值並將其存儲在一排,比下面一行將包含從11到20的值的平均值等等。
基本上我需要「壓縮」10行中的一個具有「值」列的平均值的行。
我使用的是Postgres 9.2
爲此,您可以使用窗口功能:如果你想確保你的第十個行
select avg(value) over (order by date
rows between 9 preceding and current row) as MovingAvg10
from t;
,你可以這樣做:
select (case when row_number() over (order by date) >= 10
then avg(value) over (order by date
rows between 9 preceding and current row
)
end) as MovingAvg10
from t;
編輯:
修改後的問題要容易得多:
select ((seqnum - 1)/10) as whichgroup, avg(value)
from (select row_number() over (order by date) as seqnum, t.*
from table t
) t
group by ((seqnum - 1)/10)
order by 1;
Postgres做整數除法,但如果你想明確,你可以這樣做:trunc((seqnum - 1)/10)
得到組號碼。
重點是做你所說的一個一個的窗口,所以我第一次有一個窗口是1-10,第二次是2-11,3-13等等。我想要的是一個10乘10的窗口,所以第一次平均在1-10行之間,第二次11-20,21-30等等。 第二段代碼,如果我是正確的開始執行平均計算從第10行開始 – MastErAldo
順便說一句,我認爲「範圍」關鍵字必須刪除,因爲postgres文檔說,選擇範圍和行: http: //www.postgresql.org/docs/9.1/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS – MastErAldo
@MastErAldo。 。 。我刪除了'range'關鍵字。 –
會MS SQL解決方案的幫助? – DhruvJoshi
如果ms sql解決方案在某種程度上由postgres 9.2語法支持,那麼是因爲我需要使用postgres – MastErAldo
您是否有自動遞增鍵? – Mihai