我有一個表T1具有以下值SQL語句來更新一列
我需要附加列是高達日期的平均結果表。 即
x1= 1000.45
x2= (1000.45+2000.00)/2
x3= (1000.45+2000.00+3000.50)/3
x4= (1000.45+2000.00+3000.50+4000.24)/4
結果表應如下所示:
我需要在Oracle數據庫中編寫SQL語句,以將列添加到列值爲x1,x2,x3,x4的結果表中。
我有一個表T1具有以下值SQL語句來更新一列
我需要附加列是高達日期的平均結果表。 即
x1= 1000.45
x2= (1000.45+2000.00)/2
x3= (1000.45+2000.00+3000.50)/3
x4= (1000.45+2000.00+3000.50+4000.24)/4
結果表應如下所示:
我需要在Oracle數據庫中編寫SQL語句,以將列添加到列值爲x1,x2,x3,x4的結果表中。
您需要爲此使用分析函數。我的未經檢驗的SQL如下:
SELECT
date,
division,
sum_sales,
AVG(sum_sales) OVER (ORDER BY date ROWS UNBOUNDED PRECEDING)
FROM
table;
date
是Oracle的保留字,因此,如果您使用的是您的真實列名,你需要把它列入報價。
我想你需要按... –
@anwaar_hell不,不需要具有分析功能的GROUP BY。沒有分組,因爲每個原始行都在結果中表示。 –
select date,division,sum_sales,avg(sum_sales) over (order by sum_sales ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
from table
group by date,division,sum_sales
您需要通過使用日期AVG功能OVER排序。由於各行的所有前行聚集結果,你需要定義聚集window爲UNBOUNDED PRECEDING
遵循這些指導方針,得到的說法是這樣的:
SELECT date_d,
division,
sum_sales,
AVG(sum_sales)
over (
ORDER BY date_d ROWS unbounded preceding) avrg
FROM supplier;
你可以測試在FIDDLE
好兩個有關分析函數的信息在這兩篇文章:
Introduction to Analytic Functions (Part 1)
Introduction to Analytic Functions (Part 2)
「我需要寫SQL語句」是啊很酷,那麼你寫了什麼? – Coderchu
@Gonzalo謝謝你編輯我的問題。我是新來的,不知道格式 – user5505661
看看[這篇文章](http://www.adp-gmbh.ch/ora/sql/analytical/rollingavg.html)給你一些想法。 –