Postgres:不同但只有一列

我有一个与名称(有超过1 mio。行)的pgsql表,但我也有很多重复。 我select3个字段: idnamemetadata

我想用ORDER BY RANDOM()LIMIT 1000来随机select它们,所以我这样做是在我的PHP脚本中保存一些内存的很多步骤。

但是我怎么能这么做呢,只给了我一个没有名字重复的名单。

例如[1,"Michael Fox","2003-03-03,34,M,4545"]将被退回,但不是[2,"Michael Fox","1989-02-23,M,5633"] 。 名称字段是最重要的,并且每次执行select时都必须在列表中唯一,并且必须是随机的。

我尝试使用GROUP BY name ,然后它期望我有GROUP BY以及在一个aggragate函数中的id和元数据,但我不想让他们以某种方式过滤。

任何人都知道如何获取许多列,但只做一个独特的列?

要在一个(或多个)列上进行区分:

 select distinct on (name) name, col1, col2 from names 

这将返回任何包含名称的行。 如果你想控制哪一行将被返回,你需要命令:

 select distinct on (name) name, col1, col2 from names order by name, col1 

按col1sorting时将返回第一行。

任何人都知道如何获取许多列,但只做一个独特的列?

你想要DISTINCT ON子句 。

您没有提供样本数据或完整的查询,所以我没有任何东西可以显示给您。 你想写的东西,如:

 SELECT DISTINCT ON (name) fields, id, name, metadata FROM the_table; 

这将返回一个不可预知(但不是“随机”)的行集。 如果您想使其可预测,请按照Clodaldo的答案添加ORDER BY 。 如果你想使它成为真正的随机,你需要ORDER BY random()

 SELECT NAME,MAX(ID) as ID,MAX(METADATA) as METADATA from SOMETABLE GROUP BY NAME