sql计算共同好友个数问题
计算以下表中共同好友个数

思路:先将好友使用split函数和explode函数,处理成下图格式。然后使用friend_id字段进行自关联(找出有共同好友的user_jd),剔除t1.user_id=t2.user_id(自己和自己有共同好友的情况),然后将关联后得到的两user_id按大小顺序处理,排除重复数据,如 A和B共同好友2个,B和A共同还有2个

select case when t1.user_id <= t2.user_id then t1.user_id else t2.user_id end user_id_1,
case when t1.user_id <= t2.user_id then t2.user_id else t1.user_id end user_id_2,
count(distinct t1.friend_id) friend_count
from (select user_id,friend_id
from (select 'A' user_id,'B,C,D' friend_id
from system.dual
union all
select 'B' user_id,'C,D,E' friend_id
from system.dual)
lateral view explode(split(friend_id,',')) num as friend_id)t1
inner join
(select user_id,friend_id
from (select 'A' user_id,'B,C,D' friend_id
from system.dual
union all
select 'B' user_id,'C,D,E' friend_id
from system.dual)
lateral view explode(split(friend_id,',')) num as friend_id)t2
on t1.friend_id = t2.friend_id
where t1.user_id != t2.user_id
group by case when t1.user_id <= t2.user_id then t1.user_id else t2.user_id end,
case when t1.user_id <= t2.user_id then t2.user_id else t1.user_id end

浙公网安备 33010602011771号