8

私は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

しかし、私の問題は、列「age」の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()同じ機能を実行するランダムな機能はありますか?

4

2 に答える 2

11

モジュロ演算を使用して、0からn -1まで循環し、1を追加できます。

SELECT i AS id, (i - 1) % 3 +1 AS age, i AS house_number
INTO egg
FROM generate_Series(1,6) AS i;
于 2011-10-17T13:47:43.777 に答える
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)
于 2011-10-18T16:17:42.357 に答える