【发布时间】:2016-11-23 23:36:26
【问题描述】:
这看起来非常简单,但我只是没有把它放在一起。说我有价值观
a | b
---+---
1 | 10
1 | 20
2 | 10
2 | 20
如何从该表中进行选择,以便在表中获取这些值:
a | b
---+---
1 | 10
2 | 20
同样适用于:
a | b
---+---
1 | 10
1 | 20
1 | 30
2 | 10
2 | 20
2 | 30
3 | 10
3 | 20
3 | 30
得到
a | b
---+---
1 | 10
2 | 20
3 | 30
我尝试了 distinct on 和 order by 的不同组合,但这些都行不通,因为它确实需要在 a 和 b 上都不同。也许是一个窗口函数......?如果重要,请使用 postgres。
【问题讨论】:
-
@klin b 是 b 列中的第一个唯一值。所以如果 1 | 10 已存在 2 | 10 无效,必须为 2 | 20
-
使用
ctrl-K或在行首添加4个空格以格式化为code -
是否保证每个
a恰好出现n次? -
在我的数据集中,我相信是这样。我的数据集真正的复杂性是这个操作应该只发生在重复项上。所以如果集合是 {1,10}, {1,20}, {2, 10}, {2,20}, {3,999} 结果应该是 {1,10}, {2,20}, {3,999} .基本上是非笛卡尔积重复。也许这超出了我所问的范围......
标签: sql database postgresql select