插入值(generate_series) - 如何重用/循环数字,例如1,2,3,1,2,3

时间:2011-10-17 13:44:57

标签: postgresql generate-series

我使用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()中是否有一些执行相同功能的随机函数?

2 个答案:

答案 0 :(得分:11)

您可以使用modulo operation从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;

答案 1 :(得分: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)