当一列在不同行中包含相同的值时,仅从多个结果中获取一条记录



我的SQL结果类似于下面。我一直在使用导轨,并希望在SQLRails中获得解决方案

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 |     四

最新更新