问题描述
我想在sql的表(Commul_table)中创建累积总和,例如 Z = Z +(A + B-C)
解决方法
在这种情况下,您可以将analytic function
与rows unbounded preceding
一起使用(以获取当前行之前的总和值)
Select id,A,B,C,sum(A+B-C) over(order by Id rows unbounded preceding) as Z
From Table
,
它仍然是累计总和,只是基于对三列的计算:
sum(a+b-c) over (order by Id rows unbounded preceding)
请参见fiddle
,我要指出的是,大多数数据库不需要窗口框架子句。假设id
是唯一的:
select ct.*,sum(a + b - c) over (order by id) as z
from Commul_table;
如果id
可以重复,请说明您想要的结果。上面的内容还假设a
,b
和c
从未为NULL
。如果可以,那么您要用0
代替它们:
select ct.*,sum(coalesce(a,0) + coalesce(b,0) - coalesce(c,0)) over (order by id) as z
from Commul_table;