Dans PostgreSQL, est-il possible de générer une série de nombres répétés? Par exemple, je veux générer les nombres de 1 à 10, chaque numéro étant répété 3 fois:
1
1
1
2
2
2
3
3
3
.. and so on.
Vous pouvez le joindre à une série de 3:
SELECT a.n
from generate_series(1, 100) as a(n), generate_series(1, 3)
Vous pouvez essayer une division entière comme ceci:
SELECT generate_series(3, 100) / 3
Pour ces petits nombres, CROSS JOIN
deux VALUES
expressions:
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
Cela fonctionne pour toute séquence de nombres (y compris les motifs répétés ou irréguliers).
Pour tout ce qui est plus gros et avec un motif séquentiel régulier, utilisez generate_series()
comme suggéré.
SELECT * FROM (SELECT generate_series(1, 10)) A
JOIN (
SELECT generate_series(1, 3)
) B ON (TRUE)
Je ne sais pas si vous pouvez utiliser generate_series comme cela dans PostgreSQL, mais je voudrais essayer une jointure croisée:
SELECT x FROM
(SELECT generate_series(1, 10) AS x) t1,
(SELECT generate_series(1, 3) as y) t2
Modifier:
Comme generate_series renvoie déjà une table, SELECT n’est pas nécessaire dans une table dérivée:
SELECT x FROM
generate_series(1, 10) AS x,
generate_series(1, 3) as y
Juste une autre option:
select generate_series(1, 3) from generate_series(1, 10)
select generate_series(1, 30) % 10 + 1
SELECT a.x from generate_series(0, 100) as a(x), generate_series(1, 3)