PostgreSQL:如何选择具有重复结果的多个随机行

PostgreSQL:如何选择具有重复结果的多个随机行,postgresql,random,Postgresql,Random,我的postgres数据库中有一个表mytab,我想从中选择多个随机行。我可以通过执行 select * from mytab offset random() * (select count(*) from mytab) limit X; 但我的目标是找到一个查询,该查询返回包含X个随机行的集合,并从mytab重复。有可能吗 编辑:这里有更多的解释。 例如,如果mytab包含 我的标签 第1行 第2行 第3行 第4行 第5行 我想去 第2-1行 第3-2行 第2-3行 第4-4行 . . .

我的postgres数据库中有一个表mytab,我想从中选择多个随机行。我可以通过执行

 select * from mytab offset random() * (select count(*) from mytab) limit X;
但我的目标是找到一个查询,该查询返回包含X个随机行的集合,并从mytab重复。有可能吗

编辑:这里有更多的解释。 例如,如果mytab包含

我的标签 第1行 第2行 第3行 第4行 第5行

我想去

第2-1行 第3-2行 第2-3行 第4-4行 . . . . 第5行-X-3 第1行-X-2 第3行-X-1 第1-X行


所以你需要一个随机的替换选择。使用generate_系列中的随机函数生成所需的随机整数数,并进行替换

然后在用行号装饰后将其连接到原始表

如果您知道原始表有一个紧密压缩的整数主键,通常不可能知道,那么您可以通过不需要动态计算行数来优化它

select * from 
(select floor(random()*(select count(*) from pgbench_tellers)+1) as 
    row_number from generate_series(1,10)
) rwr 
join 
(select *, row_number() over () from pgbench_tellers) original
using (row_number) ;

在这里使用pgbench_出纳员而不是您的表,因为我无法使用假设的表进行测试。

重复随机行的随机数是什么意思?您希望您的查询包含随机重复多次的同一行吗?请澄清。使用一个示例来演示是否难以用文字表达。您确实需要提供示例数据,如CREATE TABLE和INSERT语句以及此语句的预期结果。在generate_系列和一些子选择/联接的帮助下,这应该是可行的。谢谢,这正是我想要的!