问题描述
我有一个包含“观察”列的表格示例:
请帮助使用 SQL 命令以获得以下“累积乘法”输出:
2
6
30
300
解决方法
一种方法是递归 CTE:
with tt as (
select t.*,row_number() over (order by obs) as seqnum
from t
),cte as (
select obs as prod,seqnum
from tt
where seqnum = 1
union all
select cte.prod * tt.obs,tt.seqnum
from cte join
tt
on tt.seqnum = cte.seqnum + 1
)
select *
from cte;
另一个使用算术实现“乘积”窗口函数:
select t.*,exp(sum(log(obs)) over (order by obs))
from t;
Here 是一个 dbfiddle。