这看起来非常简单,但我只是没把它放在一起。说我有值(value)观
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。
最佳答案
我不确定distinct
在这里是正确的术语,但如果我理解正确的话,你有一组 a 和 b 的值,以及每个组合的行,你想匹配第一个 a 和第一个 b,第二个 a 和第二个 b,等等。一种方法是使用窗口函数来 rank
两列,然后只查询排名相等的行:
SELECT a, b
FROM (SELECT a, RANK() OVER (ORDER BY a) AS rank_a,
b, RANK() OVER (ORDER BY b) AS rank_b
FROM myable) t
WHERE rank_a = rank_b
关于sql - 从两个字段中选择第一个不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486231/