我有一个表T1,其中包含以下值
我需要一个带有附加列的结果表,这是最新的平均值。 即,
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。
答案 0 :(得分:1)
您需要使用分析功能。我未经测试的SQL如下:
SELECT
date,
division,
sum_sales,
AVG( sum_sales ) OVER ( ORDER BY date ROWS UNBOUNDED PRECEDING )
FROM
table;
date
是Oracle中的保留字,因此如果您将其用作真正的列名,则需要将其包含在引号中。
答案 1 :(得分:1)
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
答案 2 :(得分:1)
您需要按日期使用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)