【问题标题】:choose randomly one from a table with the same id [duplicate]从具有相同ID的表中随机选择一个[重复]
【发布时间】:2016-09-29 07:31:19
【问题描述】:

使用postgresql v8.2

比如我有这样一张桌子:

 id  | va
-----+-----
 123 | 234
 123 | 234
 123 | 456
 234 | 123
 234 | 345
 456 | 678
(6 rows)

我想要的是从表中查询以随机获取具有相同 ID 的任何人

它可能喜欢:

 id  | va
-----+-----
 123 | 234
 234 | 123
 456 | 678
(3 rows)

或喜欢:

 id  | va
-----+-----
 123 | 456
 234 | 345
 456 | 678
(3 rows)

哪个值无关紧要,但必须有一个。 感谢您向我提出任何方法。

【问题讨论】:

  • 您应该现在计划支持和维护的版本(例如 9.5)。 8.2 早已死去并被遗忘
  • 顺便说一下,我使用的是Greenplum,它是基于postgresql v8.2,这是一个旧版本。

标签: postgresql


【解决方案1】:

您在寻找GROUP BY 吗?它只会为表中的每个 Id 选择一行。

Postgresql group by

PostgreSQL GROUP BY 子句与 SELECT 语句将表中具有 相同的数据。

你的情况是否可以有以下查询:

SELECT id, max(va) FROM tablename GROUP BY id ;

【讨论】:

  • 为什么?我刚刚进行的修改会更好吗?
  • 谢谢,它有效。 =)
  • 您添加的最后一个在postgresql 中不起作用。这个有效
【解决方案2】:

select id, max(va) from table group by id;

正如您所说,va 的值无关紧要。您可以选择任何聚合。

你也可以使用distinct on

select distinct on (id) id, va from table order by id, random();

【讨论】:

  • 你能解释一下这里的random() 是做什么用的吗?我通常用它来生成双精度值。谢谢
  • 是的,random() 生成一个双精度值。在这里,将其视为一个额外的列,其中填充了在额外列上排序的随机双精度值。使用distinct on的好处是va字段是随机的,不一定是maxmin等。
  • 啊,好的,可以多列一列对查询结果进行排序,这里选择的是随机值。这使值的随机选择成为可能。我知道了,谢谢!
猜你喜欢
  • 2017-05-17
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 2012-10-22
相关资源
最近更新 更多