Я решительный сторонник представления данных этого типа с помощью таблицы соединений / связей.Обычно запросы 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 <>.