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