用于更新列的SQL语句

时间:2015-10-30 04:26:00

标签: sql database oracle sql-update

我有一个表T1,其中包含以下值

Table

我需要一个带有附加列的结果表,这是最新的平均值。 即,

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

结果表应如下所示:

expected result

我需要在Oracle数据库中编写SQL语句,将列添加到结果表中,列值为x1,x2,x3,x4。

3 个答案:

答案 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)