8

我正在使用 generate_series 在表中插入值。并且 generate_series 插入在其范围内指定的值。

例如:对于以下查询,

SELECT i AS id, i AS age, i AS house_number
INTO egg
FROM generate_Series(1,6) AS i;

我们得到的结果是:

id  age  house_number
1   1    1
2   2    2
3   3    3
4   4    4
5   5    5
6   6    6

但我的问题是,我只想在“年龄”列中插入数字 3,然后在 3 之后从 0 开始:

id  age  house_number
1   1    1
2   2    2
3   3    3
4   1    4
5   2    5
6   3    6

这可能吗?是否有一些随机函数generate_series()执行相同的功能?

4

2 回答 2

11

您可以使用模运算从 0 循环到 n - 1 并加一:

SELECT i AS id, (i - 1) % 3 +1 AS age, i AS house_number
INTO egg
FROM generate_Series(1,6) AS i;
于 2011-10-17T13:47:43.777 回答
4

您可以使用旨在做到这一点的序列:

create table test (id serial);
alter sequence test_id_seq cycle minvalue 0 maxvalue 3 start 0 restart;
insert into test values(DEFAULT);
insert into test values(DEFAULT);
insert into test values(DEFAULT);
insert into test values(DEFAULT);
insert into test values(DEFAULT);
insert into test values(DEFAULT);
insert into test values(DEFAULT);
insert into test values(DEFAULT);
select * from test;
 id 
----
  0
  1
  2
  3
  0
  1
  2
  3
(8 rows)
于 2011-10-18T16:17:42.357 回答