我想在列上添加 运行 值的总和,但如果序列失败,那么我们不必添加
I want to add sum for running value on a column but if sequence fails then we have don't have to add
我有table这样的
+----+--------+------+------+
| id | state | num | pop |
+----+--------+------+------+
| 1 | ny | 1 | 100 |
| 1 | ny | 2 | 200 |
| 1 | ny | 3 | 600 |
| 1 | ny | 6 | 400 |
| 1 | ny | 7 | 300 |
| 1 | ny | 14 | 1000 |
| 2 | nj | 3 | 250 |
+----+--------+------+------+
我想要如下输出
+---+----+----+------+------+
| 1 | ny | 1 | 100 | 900 |
| 1 | ny | 2 | 200 | 900 |
| 1 | ny | 3 | 600 | 900 |
| 1 | ny | 6 | 400 | 700 |
| 1 | ny | 7 | 300 | 700 |
| 1 | ny | 14 | 1000 | 1000 |
| 2 | nj | 3 | 250 | 250 |
+---+----+----+------+------+
因此,如果 num 列中有一个 seq,那么我们必须添加 pop 列。所以前 3 列 num column 有 1,2,3 这是按顺序所以我们添加弹出列 100+200+600 并显示为新列。
我试过下面的代码,但我没有收到想要的输出
select id, state,num, pop,
sum(pop) over (partition by id, state order by num )
from table
如果您减去一个序列,则行中的值将保持不变。然后你可以使用window函数:
select t.*,
sum(pop) over (partition by state, num - seqnum) as new_population
from (select t.*,
row_number() over (partition by state order by num) as seqnum
from t
) t;
Here 是一个 db<>fiddle(使用 Postgres)。
我有table这样的
+----+--------+------+------+
| id | state | num | pop |
+----+--------+------+------+
| 1 | ny | 1 | 100 |
| 1 | ny | 2 | 200 |
| 1 | ny | 3 | 600 |
| 1 | ny | 6 | 400 |
| 1 | ny | 7 | 300 |
| 1 | ny | 14 | 1000 |
| 2 | nj | 3 | 250 |
+----+--------+------+------+
我想要如下输出
+---+----+----+------+------+
| 1 | ny | 1 | 100 | 900 |
| 1 | ny | 2 | 200 | 900 |
| 1 | ny | 3 | 600 | 900 |
| 1 | ny | 6 | 400 | 700 |
| 1 | ny | 7 | 300 | 700 |
| 1 | ny | 14 | 1000 | 1000 |
| 2 | nj | 3 | 250 | 250 |
+---+----+----+------+------+
因此,如果 num 列中有一个 seq,那么我们必须添加 pop 列。所以前 3 列 num column 有 1,2,3 这是按顺序所以我们添加弹出列 100+200+600 并显示为新列。
我试过下面的代码,但我没有收到想要的输出
select id, state,num, pop,
sum(pop) over (partition by id, state order by num )
from table
如果您减去一个序列,则行中的值将保持不变。然后你可以使用window函数:
select t.*,
sum(pop) over (partition by state, num - seqnum) as new_population
from (select t.*,
row_number() over (partition by state order by num) as seqnum
from t
) t;
Here 是一个 db<>fiddle(使用 Postgres)。