如何在Postgres中比较同一表的两个数组行?

时间:2018-12-30 12:59:15

标签: sql postgresql postgresql-9.5

我有一个如下表:

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

其中dept文本数组

我的要求是比较表中的行,以便可以检查列dept是否具有相等的值。例如,在上表中,它应与 1000-{hr}与1005-{hr}的相似度输出为1。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

我强烈建议使用联结/关联表来表示此类数据。通常,可以更好地优化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;

Here是db <>小提琴。