如何在 Postgresql 中创建一个以 4 步递增的列
How to create a column that increments in steps of 4 in Postgresql
我正在尝试向我的 table 添加一列,该列以四步递增,如下所示:
1
1
1
1
2
2
2
2
3
3
3
3
etc.
我一直在阅读有关 CREATE SEQUENCE 的内容,但这似乎不是我需要的。
有没有人建议如何最好地做到这一点?
您可以使用 row_number()
和整数除法:
select
t.*,
(3 + row_number() over(order by id)) / 4 rn
from mytable t
这假定您有一个名为 id
的排序列。我实际上不建议存储此派生信息。您可以即时计算它,也可以放在视图中。
您仍然可以使用常规序列作为默认值,但改为执行以下操作:
CREATE TABLE test (col1 int, col2 text);
CREATE SEQUENCE test_col1_seq OWNED BY test.col1;
ALTER TABLE test ALTER COLUMN col1 SET DEFAULT ceil(nextval('test_col1_seq')/4::numeric);
SELECT * FROM test;
col1 | col2
------+------
1 | a
1 | b
1 | c
1 | d
2 | e
2 | f
2 | g
2 | h
3 | i
(9 rows)
这只是除以 4,然后向下取整。
我正在尝试向我的 table 添加一列,该列以四步递增,如下所示:
1
1
1
1
2
2
2
2
3
3
3
3
etc.
我一直在阅读有关 CREATE SEQUENCE 的内容,但这似乎不是我需要的。
有没有人建议如何最好地做到这一点?
您可以使用 row_number()
和整数除法:
select
t.*,
(3 + row_number() over(order by id)) / 4 rn
from mytable t
这假定您有一个名为 id
的排序列。我实际上不建议存储此派生信息。您可以即时计算它,也可以放在视图中。
您仍然可以使用常规序列作为默认值,但改为执行以下操作:
CREATE TABLE test (col1 int, col2 text);
CREATE SEQUENCE test_col1_seq OWNED BY test.col1;
ALTER TABLE test ALTER COLUMN col1 SET DEFAULT ceil(nextval('test_col1_seq')/4::numeric);
SELECT * FROM test;
col1 | col2
------+------
1 | a
1 | b
1 | c
1 | d
2 | e
2 | f
2 | g
2 | h
3 | i
(9 rows)
这只是除以 4,然后向下取整。