如何比较 Postgres 中相同 table 的两个数组行?

How to compare two array rows of same table in Postgres?

我有一个 table 如下所示:

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

其中 dept 是一个 文本数组

我的要求是比较 table 中的行,这样我就可以检查 dept 列是否有任何相等的值。例如,在上面的 table 它应该比较 1000 - {hr} 和 1005 - {hr} 将相似度输出为 1。

我怎样才能做到这一点?

我坚决主张使用 junction/association table 表示此类数据。通常,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<>fiddle.