0

我需要开发一个执行以下操作的 SQL 查询:

        Column A     Column B

Row1    2861682      sum(Row1 to Row5)
Row2    2522226      sum(Row2 to Row5)  
Row3    2285983      sum(Row3 to Row5)
Row4    2096046      sum(Row4 to Row5)  
Row5    1935355      sum(Row5)  

这是我在表格列中的数据。

现在我需要计算

sum(Row1 to Row5) 
sum(Row2 to Row5) 
sum(Row3 to Row5) 
sum(Row4 to Row5)
sum(Row5)

谢谢

4

1 回答 1

3

用于此的标准 SQL 表单使用相关子查询:

select t.*,
       (select sum(B)
        from t t2
        where t2.A >= t.A
       ) as TheSum
from t;

一些数据库还支持允许累积和的窗口/分析函数。

编辑:

Netezza 是使用窗口函数支持累积和的数据库之一(我想这要归功于它的 Postgres 遗产)。您也可以将其表示为:

select t.*,
       sum(B) over (order by A desc) as TheSum
from t

编辑二:

我没有要测试的 Netezza 数据库,但它确实有该RowId列。您也许可以使用它,尽管我找不到任何保证其单调递增的文档。事实上,我很确定对于并行加载,不会单调地分配 rowid。

查询如下所示:

select t.*,
       sum(B) over (order by rowid desc) as TheSum
from t
于 2013-07-23T11:19:25.750 回答