我在pgsql上有一个名为(超过1百万行)的表,但也有许多重复项。我选择了3个字段:id,name,元数据
我想用orderbyrandom()和limit1000随机选择它们,所以我要做的是在PHP脚本中节省一些内存
但我如何才能做到这一点,使它只给我一个名单没有重复的名字
例如,将返回[1,“Michael Fox”,“2003-03-03,34,M,4545”],但不会返回[2,“Michael Fox”,“1989-02-23,M,5633”]。“名称”字段是最重要的字段,每次我进行选择时,它在列表中必须是唯一的,并且必须是随机的
我尝试了按名称分组,但它希望我在按名称分组中或在加积函数中也有id和元数据,但我不希望以某种方式对它们进行过滤
有人知道如何获取多个列,但只对一个列执行一个不同的操作吗
要仅对一列(或n列)执行distinct操作,请执行以下操作:
选择“不同的打开”(名称)
姓名,col1,col2
从名字
这将返回包含名称的任何行。如果要控制返回哪些行,则需要订购:
选择“不同的打开”(名称)
姓名,col1,col2
从名字
按姓名排序,col1
按col1排序时将返回第一行
在上显示:
SELECT DISTINCT ON(表达式[,…])仅保留给定表达式计算结果相等的每组行的第一行。DISTINCT ON表达式使用与ORDER BY相同的规则进行解释(见上文)。请注意,每个集合的“第一行”是不可预测的,除非使用ORDER BY来确保所需的行首先出现
DISTINCT ON表达式必须与最左边的ORDER BY表达式匹配。ORDER BY子句通常包含其他表达式,这些表达式确定每个DISTINCT ON组中所需的行优先级