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