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

posted @ 2021-11-01 18:32  Windsong的博客  阅读(658)  评论(0)    收藏  举报