我有一张下表,其中包含一列VALUE1,我想计算VALUE1中上一行与当前行之间的平均值,并在第二列VALUE2中从第二行开始进行表示,即第一行值将不能被平均。
结果应该像
ID VALUE1 VALUE2
1 3 3
2 4 3.5
3 5 4.5
4 5 5
5 6 5.5
6 2 4
注意:对于第一行(ID = 1),我将第一行与自己平均。
任何帮助表示赞赏。预先感谢。
答案 0 :(得分:2)
我认为您可以使用此查询,它给出的输出与您提到的相同。
创建表脚本:
create table practicenew (ID number, Value1 number) ;
insert into practicenew (ID, Value1) values (1, 3) ;
insert into practicenew (ID, Value1) values (2,4) ;
insert into practicenew (ID, Value1) values (3,5);
insert into practicenew (ID, Value1) values (4,5);
insert into practicenew (ID, Value1) values (5,6);
insert into practicenew (ID, Value1) values (6,2 );
然后使用NVL和滞后功能。延迟会将您先前的值带到当前行,而nvl将被用于第一行,因为使用延迟时第一行将具有空值。
Query: select ID, value1,nvl(((lag(value1) over (order by ID) + value1)/2),value1) as Value2
from practicenew;
输出:
ID Value1 Value2
1 3 3
2 4 3.5
3 5 4.5
4 5 5
5 6 5.5
6 2 4
希望对您有所帮助!
答案 1 :(得分:2)
您还可以在上一行和当前行的窗口中使用k
分析函数:
AVG()