Nov*_*der 109 postgresql select distinct
我有一个关于pgsql的表,其名称(超过1 mio.行),但我也有很多重复.我选择3个字段:id
,name
,metadata
.
我想用ORDER BY RANDOM()
和随机选择它们LIMIT 1000
,所以我这样做是为了在我的PHP脚本中保存一些内存.
但是我怎么能这样做,所以它只给我一个名单上没有重复的列表.
例如,[1,"Michael Fox","2003-03-03,34,M,4545"]
将返回但不是[2,"Michael Fox","1989-02-23,M,5633"]
.名称字段是最重要的,每次我选择时都必须在列表中是唯一的,它必须是随机的.
我试过GROUP BY name
,然后它希望我在GROUP BY
同样或在aggragate函数中有id和元数据,但我不想让它们以某种方式过滤.
任何人都知道如何获取许多列,但只在一列上做一个不同的?
Clo*_*eto 203
仅对一个(或n)列执行不同的操作:
select distinct on (name)
name, col1, col2
from names
Run Code Online (Sandbox Code Playgroud)
这将返回包含该名称的任何行.如果要控制将返回哪些行,则需要订购:
select distinct on (name)
name, col1, col2
from names
order by name, col1
Run Code Online (Sandbox Code Playgroud)
按col1排序时将返回第一行.
SELECT DISTINCT ON(expression [,...])仅保留给定表达式求值的每组行的第一行.使用与ORDER BY相同的规则解释DISTINCT ON表达式(参见上文).请注意,除非使用ORDER BY确保首先显示所需的行,否则每个集合的"第一行"都是不可预测的.
DISTINCT ON表达式必须与最左边的ORDER BY表达式匹配.ORDER BY子句通常包含其他表达式,用于确定每个DISTINCT ON组中行的所需优先级.
Cra*_*ger 16
任何人都知道如何获取许多列,但只在一列上做一个不同的?
你想要这个DISTINCT ON
条款.
您没有提供示例数据或完整查询,因此我没有任何内容可以向您展示.你想写下这样的东西:
SELECT DISTINCT ON (name) fields, id, name, metadata FROM the_table;
Run Code Online (Sandbox Code Playgroud)
这将返回一组不可预测(但不是"随机")的行.如果你想让它可预测,请ORDER BY
按照Clodaldo的答案添加一个.如果你想让它真正随机,你会想要ORDER BY random()
.
对 n 列执行不同操作:
select distinct on (col1, col2) col1, col2, col3, col4 from names
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80254 次 |
最近记录: |