PostgreSQL SQL:从每个id中查找单个任意元组

时间:2011-09-11 15:26:48

标签: sql postgresql

考虑下表:

 id | x  |  y  
----+----+-----
  1 | 10 | 100
  1 | 20 | 120
  1 | 30 | 130
  2 | 10 | 130
  2 | 20 | 130
  2 | 30 | 130
  3 | 20 | 130
(7 rows)

我希望每个id都有一个任意元组,并带有相应的xy值。以下结果是正确的:

 id | x  |  y  
----+----+-----
  1 | 10 | 100
  2 | 20 | 130
  3 | 20 | 130

或者:

 id | x  |  y  
----+----+-----
  1 | 30 | 130
  2 | 30 | 130
  3 | 20 | 130

idxy在任何情况下都不是唯一的。

如何在SQL中(PostgreSQL下)进行此操作?可能有数百万id s。

更新

谢谢,@LukášLalinský。引用您链接到的PostgreSQL文档:

  

DISTINCT ON(表达式[,...])仅保留每个的第一行   给定表达式求值等于的行集...请注意,每个集合的“第一行”是   除非ORDER BY用于确保所需的行,否则不可预测   首先出现。

1 个答案:

答案 0 :(得分:3)

使用DISTINCT ON子句应该完成这项工作:

SELECT DISTINCT ON (id) id, x, y FROM table