我有一个如下表:
empid dept
----- ----
1000 {acct,hr}
1005 {dev,hr}
其中dept
是文本数组。
我的要求是比较表中的行,以便可以检查列dept
是否具有相等的值。例如,在上表中,它应与
1000-{hr}与1005-{hr}的相似度输出为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 <>小提琴。