How can I generate a series of repeating numbers in PostgreSQL?

后端 未结 7 807
长发绾君心
长发绾君心 2021-01-17 07:36

In PostgreSQL, is it possible to generate a series of repeating numbers? For example, I want to generate the numbers 1 to 10, with each number repeated 3 times:



        
相关标签:
7条回答
  • 2021-01-17 08:06

    Just another options:

    select generate_series(1, 3) from generate_series(1, 10)
    
    select generate_series(1, 30) % 10 + 1
    
    0 讨论(0)
  • 2021-01-17 08:09

    For such small numbers CROSS JOIN two 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.

    This works for any sequence of numbers (including repeated or irregular patterns).
    For anything bigger and with regular sequential pattern use generate_series() as has been suggested.

    0 讨论(0)
  • 2021-01-17 08:15

    You could try integer division like this:

    SELECT generate_series(3, 100) / 3
    
    0 讨论(0)
  • 2021-01-17 08:22

    You could cross join it to a series of 3:

    SELECT a.n
    from generate_series(1, 100) as a(n), generate_series(1, 3)
    
    0 讨论(0)
  • 2021-01-17 08:27

    I don't know if you can do use generate_series like that in PostgreSQL, but i would try a cross join:

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

    Edit:

    As generate_series already returns a table there's no need for SELECT in a Derived Table:

    SELECT x FROM
      generate_series(1, 10) AS x, 
      generate_series(1, 3) as y
    
    0 讨论(0)
  • 2021-01-17 08:29
    SELECT a.x from generate_series(0, 100) as a(x), generate_series(1, 3)
    
    0 讨论(0)
提交回复
热议问题