在Postgres中创建自定义编号

时间:2017-08-08 23:32:36

标签: sql postgresql

我有一个包含这些列的表:

track    track_id
-----------------
1        1
1        1
0        2
1        2
1        2
0        3
1        3
1        3
0        4
0        5
....

我有专栏track,想要计算track_id,这将是: 从1开始,每次track为0时,track_id应增加1(0指定新曲目的开头)。

我希望我可以设置一个变量,然后在每次条件为真时递增它,但似乎没有一种简单的方法可以做到这一点。

我很感激可以提出这个问题的查询。谢谢。

1 个答案:

答案 0 :(得分:1)

首先,您需要一个指定排序的列。 SQL表表示无序集。我假设你有这样一个专栏,我只会打电话给id

然后,您可以使用累积总和:

select t.*, 1 + sum( (track = 0)::int ) over (order by id) as track_id
from t;

如果track仅采用值0和1,则可以进一步简化:

select t.*, 1 + sum(1 - track) over (order by id) as track_id
from t;