Как сравнить две строки массива одной таблицы в Postgres? - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть таблица, как показано ниже:

empid  dept
-----  ----
1000   {acct,hr}
1005   {dev,hr}

, где dept - текстовый массив .

Мое требование - сравнить строки в таблице так, чтобы я мог проверить, имеет ли столбец dept одинаковые значения или нет.Например, в приведенной выше таблице следует сравнить 1000 - {час} с 1005 - {час}, чтобы получить результат сходства как 1.

Как мне этого добиться?

1 Ответ

0 голосов
/ 30 декабря 2018

Я решительный сторонник представления данных этого типа с помощью таблицы соединений / связей.Обычно запросы SQL могут быть лучше оптимизированы.

Но, учитывая вашу структуру данных, вы можете сгенерировать все пары сотрудников, а затем подсчитать, в каких отделах они совпадают.Предполагая, что для данного сотрудника нет дублирующих отделов (как в вашем списке):

with t as (
      select v.*
      from (values (1000, array['acct', 'hr']), (1005, array['dev', hr'])) v(empid, depts)
     )
select t1.empid, t2.empid,
       (select count(*)
        from unnest(t1.depts) d1 join
             unnest(t2.depts) d2
             on d1 = d2
       ) cnt
from t t1 join
     t t2
     on t1.empid < t2.empid;

Здесь - это скрипта db <>.

...