Вставка значений (generate_series) - как я могу использовать / циклически повторять числа, например, 1,2,3,1,2,3 - PullRequest
8 голосов
/ 17 октября 2011

Я использую 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 в столбце "возраст", а затем начать с 0 после 3:

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 ]

11 голосов
/ 17 октября 2011

Вы можете использовать операцию по модулю для циклического перехода от 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;
4 голосов
/ 18 октября 2011

Вы можете использовать последовательность, предназначенную именно для этого:

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)
...