web-dev-qa-db-fra.com

Comment puis-je générer une série de nombres répétés dans PostgreSQL?

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.
15
oshongo

Vous pouvez le joindre à une série de 3:

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

Vous pouvez essayer une division entière comme ceci: 

SELECT generate_series(3, 100) / 3
12
frlan

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

SQL Fiddle.

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é.

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

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

3
Armon

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
2
dnoeth

Juste une autre option:

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