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