行总和 - SQL查询

时间:2013-07-23 11:13:35

标签: sql netezza

我需要开发一个执行以下操作的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)

由于

1 个答案:

答案 0 :(得分: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

编辑II:

我没有要测试的Netezza数据库,但它确实有RowId列。你也许可以使用它,虽然我找不到任何保证单调增加的文档。事实上,我很确定对于并行加载,rowid将被单调分配。

查询看起来像:

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