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

时间:2014-05-27 00:41:09

标签: postgresql random

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

来做到这一点
 select * from mytab offset random() * (select count(*) from mytab) limit X;

但我的目标是找到一个返回包含X个随机行的集合的查询,并重复mytab。它甚至可能吗?

编辑:这里有一些解释。

E.g。如果mytab包含

  
    

MYTAB

         

row1
    第2行     第3行     row4
    第5行

  

我想要

  
    

第2行 - #1
    第3行 - #2
    第2行 - #3
    第4行 - #4
    。
    。
    。
    。
    第5行 - #X-3
    第1行 - #X-2
    第3行 - #X-1
    第1行 - #X

  

1 个答案:

答案 0 :(得分:0)

所以你想要随机选择替换。使用generate_series()中的random()函数生成所需的随机整数数,并替换。

然后在用row_numbers修饰后将其连接到原始表。

如果您知道原始表有一个紧密打包的整数主键(通常无法知道),那么您可以通过不需要动态计算row_numbers()来优化它。

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_tellers而不是你的表,因为我不能用假设的表进行测试。)