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

#postgresql #generate-series

#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 в столбце «возраст», а затем начать с 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() , которые выполняют ту же функцию?

Ответ №1:

Вы можете использовать операцию по модулю для цикла от 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. Или, если таблица уже существует, вы можете просто сделать INSERT INTO egg SELECT ... FROM ...

Ответ №2:

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

 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)