web-dev-qa-db-ja.com

PostgreSQLで一連の繰り返し数を生成するにはどうすればよいですか?

PostgreSQLでは、一連の繰り返し数を生成することは可能ですか?たとえば、1〜10の数値を生成し、各数値を3回繰り返します。

1
1
1
2
2
2
3
3
3
.. and so on.
21
oshongo

あなたはそれを一連の3にクロス結合することができます:

SELECT a.n
from generate_series(1, 100) as a(n), generate_series(1, 3)
33
Bohemian

次のような整数除算を試すことができます:

SELECT generate_series(3, 100) / 3
16
frlan

そのような小さい数値の場合、_CROSS JOIN_ 2つ VALUES 式:

_SELECT n
FROM  (VALUES (1),(2),(3)) x(r)  -- repetitions (values are not used)
     ,(VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) y(n); -- numbers
_

SQLフィドル

これは、any番号のシーケンス(繰り返しまたは不規則なパターンを含む)で機能します。
これより大きく、通常の順次パターンを使用する場合は、提案されているように generate_series() を使用します。

7
SELECT * FROM (SELECT generate_series(1, 10)) A
JOIN (
  SELECT generate_series(1, 3)
) B ON (TRUE)

http://www.sqlfiddle.com/#!12/d41d8

4
Armon

PostgreSQLでそのようなgenerate_seriesを使用できるかどうかはわかりませんが、クロス結合を試してみます。

SELECT x FROM
  (SELECT generate_series(1, 10) AS x) t1, 
  (SELECT generate_series(1, 3) as y) t2

編集:

Generate_seriesは既にテーブルを返すため、派生テーブルでSELECTを行う必要はありません。

SELECT x FROM
  generate_series(1, 10) AS x, 
  generate_series(1, 3) as y
3
dnoeth

ちょうど別のオプション:

select generate_series(1, 3) from generate_series(1, 10)

select generate_series(1, 30) % 10 + 1
2
Tomas Greif
SELECT a.x from generate_series(0, 100) as a(x), generate_series(1, 3)
1
Imran Ali Khan