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

PostgreSQL:从每个id中查找单个任意元组,sql,postgresql,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都有一个任意的元组,其中包含相应的x和y值。以下结果是正确的: id | x | y ----+----+----- 1 | 10 | 100 2 | 20 |

考虑下表:

 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
都有一个任意的元组,其中包含相应的
x
y
值。以下结果是正确的:

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

id
x
y
在任何上下文中都不是唯一的

如何在SQL中实现这一点(在
PostgreSQL
下)?可能有数百万个
id
s

更新:

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

上的DISTINCT(表达式[,…])只保留每个表达式的第一行
给定表达式计算结果等于的行集。。。请注意,每组的“第一行”是
不可预测,除非使用排序依据来确保所需行
首先出现

使用该子句应完成以下工作:

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

我不明白这个问题。更重要的是,我不明白你在期待什么,以及你是如何得出你的例子的。您的基表似乎已经是一个独特的集合。您只是在尝试为每个ID随机选取一条记录吗?我想为每个
ID
获取一个任意行。也就是说,一行id=1,一行id=2,一行id=3。我不在乎选择同一id集中的哪一行。亚当·马坦,这很有道理,但我很好奇为什么有人会想要那样。@vol7ron:我一直都有机会需要这种东西。应用程序“假定”两件事是一对一的,但模式表明并非如此。在应用程序的规范中,没有任何内容表明应该优先选择多个值中的哪一个。
SELECT DISTINCT ON (id) id, x, y FROM table