SQLite:SELECT语句中的accumulator(sum)列

时间:2010-09-24 10:03:10

标签: sql sqlite sum running-total accumulator

我有一张像这样的表:

  

SELECT value FROM table;

value
1
3
13
1
5

我想添加一个累加器列,以便我得到这个结果:

value  accumulated
1      1
3      4
13     17
1      18
5      23

我该怎么做?我想做什么真正的名字是什么?感谢

3 个答案:

答案 0 :(得分:13)

尝试这种方式:

select value,
(select sum(t2.value) from table t2 where t2.id <= t1.id ) as accumulated
from table t1

但是如果它不适用于您的数据库,只需按某种方式添加订单

select value,
(select sum(t2.value) from table t2 where t2.id <= t1.id order by id ) as accumulated
from table t1
order by id

这适用于oracle;)但它也应该在sqlite上

答案 1 :(得分:2)

这是一种创建运行总计的方法,而没有对所有先前行进行求和的低效率。 (我知道这个问题是6岁,但它是sqlite运行总数的第一个google条目之一。)

create table t1 (value integer, accumulated integer, id integer primary key);
insert into t1 (value) values (1);
insert into t1 (value) values (3);
insert into t1 (value) values (13);
insert into t1 (value) values (1);
insert into t1 (value) values (5);

UPDATE
    t1
SET
    accumulated = ifnull(
    (
        SELECT
            ifnull(accumulated,0)
        FROM
            t1 ROWPRIOR
        WHERE
            ROWPRIOR.id = (t1.id -1 )),0) + value;


.headers on
select * from t1;
value|accumulated|id
1|1|1
3|4|2
13|17|3
1|18|4
5|23|5

这只应在导入所有值后运行一次。或者,在再次运行之前将累积列设置为所有空值。

答案 2 :(得分:1)

该操作称为运行总和。 SQLite不支持它,但有一些方法可以使它工作。一个就像SebastianBrózda发布的那样。另一个我在另一个问题中详细说明了here