PostgreSQL:随机选择?

3 random postgresql

我正在使用PHP进行PostgreSQL.

是否可以在列FROM WHERE 条件中选择特定数量的随机值

代替

选择 FROM WHERE 条件

然后将它们转换为数组并使用array_rand()

(我不想使用这种方式,因为我将拥有数百万行并首先选择所有值,然后array_rand()可能需要花费很多时间.)


假设我有一个这样的表格:

   name    |   items
-----------+------------
    Ben    | {dd,ab,aa}  
-----------+------------
   David   |  {dd,aa}  
-----------+------------
   Bryan   | {aa,ab,cd}
-----------+------------
    Glen   |    {cd}
-----------+------------
   Edward  |   {aa,cd}
-----------+------------
   Aaron   |  {dd,aa}
-----------+------------
  ..... (many many more)
Run Code Online (Sandbox Code Playgroud)

更新:

我需要在一个列(或基本上是10个随机行)中选择匹配条件(在这种情况下是@> ARRAY[aa])的10个随机值,而不进行顺序表扫描或耗时的事情.

order by random() 因为它必须处理每一行所以需要花费很多时间,所以我会选择更好的解决方案.

小智 5

在PostgreSQL中,你可以order by random(),所以这应该是你想要的:

select name
from table
where items @>ARRAY['aa']
order by random()
limit 10;
Run Code Online (Sandbox Code Playgroud)