当前位置: 首页 > 知识库问答 >
问题:

Postgres:不同,但仅适用于一列

伊俊能
2023-03-14

我在pgsql上有一个名为(超过100万行)的表,但我也有很多重复项。我选择了3个字段:idnamemetadata

我想用ORDER BY RANDOM()LIMIT 1000随机选择它们,所以我这样做是为了在我的PHP脚本中节省一些内存。

但我如何才能做到这一点,这样它只会给我一个名单,没有重复的名字。

例如,将返回[1,“Michael Fox”,“2003-03-03,34,M,4545”],但不会返回[2,“Michael Fox”,“1989-02-23,M,5633”]。名称字段是最重要的,每次我选择时必须在列表中唯一,并且必须是随机的。

我试过使用groupby name,但它希望我在groupby中或在一个加积函数中也有id和元数据,但我不想让它们以某种方式被过滤。

有人知道如何获取多个列,但只对一个列执行一个不同的操作吗?

共有3个答案

范稳
2023-03-14

要在n列上执行不同的操作,请执行以下操作:

select distinct on (col1, col2) col1, col2, col3, col4 from names
卢深
2023-03-14

有人知道如何获取多个列,但只对一个列执行一个不同的操作吗?

您希望子句上是不同的。

你没有提供样本数据或完整的查询,所以我没有任何东西给你看。你想写一些类似的东西:

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

这将返回一组不可预测(但不是“随机”)的行。如果你想让它变得可预测,请根据Clodaldo的回答添加一个ORDER BY。如果你想让它真正随机,你需要orderbyrandom()

周通
2023-03-14

要仅对一列(或n列)执行distinct操作,请执行以下操作:

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

这将返回包含名称的任何行。如果要控制返回哪一行,需要订购:

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

按col1排序时将返回第一行。

不同于

在(表达式[,…]上)选择DISTINCT只保留给定表达式计算结果相等的每组行的第一行。DISTINCT ON表达式使用与ORDER BY相同的规则进行解释(见上文)。请注意,每个集合的“第一行”是不可预测的,除非使用ORDER BY来确保所需的行首先出现。

DISTINCT ON表达式必须与最左边的ORDER BY表达式匹配。ORDER BY子句通常会包含其他表达式,用于确定每个DISTINCT ON组中的行的所需优先级。

 类似资料:
  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 所以,我在研究一个不和谐机器人。我正在使用on_message()事件,它可以在私人消息和服务器上工作。我想这只工作在私人信息,我不知道如何去做这件事。如果有人能帮助我,那就是拉阿德。

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。

  • 我能够成功地打电话给邮递员: /mfp/api/az/v1/token和 /mfpadmin/management-apis/2.0/runtimes/mfp/applications 我正在获取从/mfp/api/az/v1/token接收的承载令牌,并将其添加到/mfp/applications的授权标头中。 我收到了来自两者的200个响应,并从每个API中获取了预期的信息。 然后,我选择从P