I am using generate_series to insert values in a table. And generate_series insert values as specified in its range.
For example: for the following query,
SELECT i AS id, i AS age, i AS house_number
INTO egg
FROM generate_Series(1,6) AS i;
the result we get is:
id  age  house_number
1   1    1
2   2    2
3   3    3
4   4    4
5   5    5
6   6    6
But my problem is, I want to insert only till number 3 in column "age" and then start from 0 after 3:
id  age  house_number
1   1    1
2   2    2
3   3    3
4   1    4
5   2    5
6   3    6
Is this possible? Are there some random functions in generate_series() which performs the same function?
You can use the modulo operation to cycle from 0 to n - 1 and add one:
SELECT i AS id, (i - 1) % 3 +1 AS age, i AS house_number
INTO egg
FROM generate_Series(1,6) AS i;
You could use a sequence designed to do just that:
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With