2017-03-15 56 views
0

我有一个表,我想从中选择PostgreSQL中的N个随机行。从Postgresql表中选择随机从Where子句和没有PK

不过,我不想选择整个表,但我想从尊重一些约束的行中随机选择(例如,在范围内的价格,颜色=“红”等)

我有已经看到了一些当id以连续方式生成时执行此操作的方法。但是,在这种情况下,会有很多差距。

有没有办法做到这一点,而不使用随机()的顺序是昂贵的?

+0

可以使用CTID而不是连续的关键,但它可能会随机取同时'为了()' –

回答

1

在PostgreSQL 9.5,你可以使用

TABLESAMPLE与方法伯努利和SYSTEM

海尔是一些很好的例子和解释,这是更好:

How to select random rows

Compare different random methods

More examples here

首先安装扩展:

创建扩展tsm_system_rows;

试试这个:

Select * from your_table tablesample system_rows(1000) 
+0

哇,谢谢!我会研究它,并试图了解它如何更好地工作明天。它可能会解决我的问题。 – silidragos

+0

它工作的很好,但得到我分组随机元素,所以如果N是一个随机数我也得到N + 1,N + 2。我认为它与分页有关。但速度更快。 – silidragos