Возьмите только одну запись из множества результатов, если один столбец содержит одно и то же значение в разных строках. - PullRequest
1 голос
/ 19 января 2020

У меня есть 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

1 Ответ

1 голос
/ 19 января 2020

В 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 Fiddle :

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