我有一张这样的桌子:
从表中选择值;
value
1
3
13
1
5
我想添加一个累加器列,以便得到以下结果:
value accumulated
1 1
3 4
13 17
1 18
5 23
我怎样才能做到这一点?我想做的事情的真名是什么?谢谢
我有一张这样的桌子:
从表中选择值;
value
1
3
13
1
5
我想添加一个累加器列,以便得到以下结果:
value accumulated
1 1
3 4
13 17
1 18
5 23
我怎样才能做到这一点?我想做的事情的真名是什么?谢谢
试试这种方式:
select value,
(select sum(t2.value) from table t2 where t2.id <= t1.id ) as accumulated
from table t1
但如果它不适用于您的数据库,只需添加 order by something
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
这是一种创建运行总计的方法,而不会低效地对所有先前的行求和。(我知道这个问题已有 6 年历史,但它是 sqlite 运行总数的第一个谷歌条目之一。)
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
这应该只在导入所有值后运行一次。或者,在再次运行之前将累积列设置为所有空值。
该操作称为运行总和。SQLite 不支持它,但有一些方法可以让它工作。一个就像 Sebastian Brózda 发布的那样。另一个我在另一个问题中详细说明。