【问题标题】:Unique random integers in postgresqlpostgresql中的唯一随机整数
【发布时间】:2015-01-16 01:15:26
【问题描述】:

有没有办法在 posgresql(尤其是 redshift)中生成唯一(不同的)随机数?以下代码生成 5 个随机整数,从 1 到 10 替换:

SELECT round(random()*(10 - 1) + 1) from generate_series(1, 5);

有没有办法生成一组 5 个随机整数,从 1 到 10而无需替换?谢谢。

【问题讨论】:

    标签: sql postgresql random amazon-redshift


    【解决方案1】:

    您可以使用 generate_series 生成 1 到 10 之间的所有数字,在 order by 子句中将它们打乱,然后取前 5 个:

    SELECT   num
    FROM     GENERATE_SERIES (1, 10) AS s(num)
    ORDER BY RANDOM()
    LIMIT    5
    

    【讨论】:

      【解决方案2】:

      试试这些选择

      1.)

       
          SELECT (9 * random())::int + 1 r_num
          FROM   generate_series(1, 10)
          GROUP  BY 1
          LIMIT  5;
        

      2.)

      
           
          SELECT round(random()*(10 - 1) + 1)::int r_num
          FROM   generate_series(1, 10) 
          GROUP  by 1 
          LIMIT  5;
          
          

      【讨论】:

        【解决方案3】:

        与其尝试删除重复项,不如从 1 到 10 的所有不同数字开始,然后从列表中随机选择:

        select generate_series(1,10)
        order by random()
        limit 5
        

        这基本上是 Mureinik 答案的更简洁的版本。

        【讨论】:

          猜你喜欢
          • 2013-11-20
          • 1970-01-01
          • 1970-01-01
          • 2017-06-06
          • 1970-01-01
          • 1970-01-01
          • 2010-12-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多