【问题标题】: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 答案的更简洁的版本。