Поиск пар ключей с одинаковыми значениями postgresql - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу написать запрос SQL, который находит пары ключей с одинаковыми значениями. Каждый ключ может иметь несколько значений.

Пример таблицы:

id, key
a,  1
a,  2
b,  1
c,  1
c,  2

Так что в этом примере единственной парой будет (a, c), потому что у них обоих есть ключи 1 и 2, а у b только ключ 1.

Чтобы решить эту проблему, я думал что-то вроде этого

(SELECT id FROM table
WHERE table.id = '[id]')
EXCEPT
(SELECT id FROM table
WHERE table.id = '[id]')

Где [id] может быть a, b или c. Если этот запрос не возвращает строк, они имеют одинаковые значения. Но я застрял после этого.

1 Ответ

0 голосов
/ 14 апреля 2020

Я думаю о двух уровнях агрегации:

select keys, array_agg(id) as ids
from (select id, array_agg(key order by key) as keys
      from t
      group by id
     ) t
group by keys
having count(*) > 1;
...