我的SQL结果类似于下面。我一直在使用导轨,并希望在SQL
或Rails
中获得解决方案
id | name | addr | add_id
-------------------------
1 | m | Q | 15
2 | n | Q | 3
3 | o | Q | 37
4 | f | R | 8
5 | c | A | 1
6 | r | M | 6
7 | v | W | 20
8 | z | T | 4
我尝试的是,如果其中一列中有多行具有公共数据,则只获取一行。例如,在上面的结果中,我Id 1, 2 and 3
具有共同addr
作为Q
。但是,我想消除这种行为,并希望我的结果如下,如果一列重复,则只取其中一行。预期结果。
id | name | addr | add_id
-------------------------
1 | m | Q | 15
4 | f | R | 8
5 | c | A | 1
6 | r | M | 6
7 | v | W | 20
8 | z | T | 4
在Postgres中,distinct on
派上用场:
select distinct on(addr) t.*
from mytable t
order by addr, id
如果确实要在结果集中按id
维护排序,则可以包装查询:
select *
from (select distinct on(addr) t.* from mytable t order by addr, id) t
order by id
DB小提琴上的演示:
ID | name | addr | add_id -: |:--- |:--- |-----: 1 |米 |问 | 15 4 |F |R | 8 5 |c |一 | 1 6 |r |米 | 6 7 |V |W | 20 8 |z |T | 四