30

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

1
1
1
2
2
2
3
3
3
.. and so on.
4

8 に答える 8

43

それを 3 つのシリーズに交差結合できます。

SELECT a.n
from generate_series(1, 100) as a(n), generate_series(1, 3)
于 2014-04-29T07:45:42.790 に答える
18

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

SELECT generate_series(3, 100) / 3
于 2014-04-29T07:42:29.900 に答える
8

このような小さな数については、次のCROSS JOIN2 つの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 フィドル。

これは、任意の数列 (繰り返しまたは不規則なパターンを含む) に対して機能します。提案されているように、
より大きく、通常の連続パターンを使用する場合。generate_series()

于 2014-04-29T07:55:41.520 に答える
4
SELECT * FROM (SELECT generate_series(1, 10)) A
JOIN (
  SELECT generate_series(1, 3)
) B ON (TRUE)

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

于 2014-04-29T07:50:25.327 に答える
3

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
于 2014-04-29T07:44:55.723 に答える