当前位置: 首页 > article >正文

SQL面试题集:识别互相关注的用户

文章目录

      • 一、题目描述
      • 二、实现步骤
        • 步骤1:筛选双向关注用户对
        • 步骤2:去重处理
        • 最终SQL实现
      • 三、其他方法

题目来源:快手

一、题目描述

快手平台需优化好友推荐算法,需从用户关注行为中筛选出双向关注的用户对(即互相关注关系),用于分析高互动用户群体的行为特征及构建社交图谱。

样例数据
假设关注关系表 follow 包含以下数据:

from_userto_user
AB
BA
AC
CA
BC

二、实现步骤

步骤1:筛选双向关注用户对

作用:通过自连接,筛选出互相关注的用户对。
SQL逻辑

select 
    t1.from_user as user_a, 
    t1.to_user as user_b
from 
    follow t1
join 
    follow t2
on 
    t1.from_user = t2.to_user 
    and t1.to_user = t2.from_user;

执行结果

user_auser_b
AB
BA
AC
CA
步骤2:去重处理

作用:确保每对用户只输出一行,避免重复。
SQL逻辑

select 
    case when t1.from_user < t1.to_user then t1.from_user else t1.to_user end as user_a,
    case when t1.from_user < t1.to_user then t1.to_user else t1.from_user end as user_b
from 
    follow t1
join 
    follow t2
on 
    t1.from_user = t2.to_user 
    and t1.to_user = t2.from_user
where 
    t1.from_user < t1.to_user;

执行结果

user_auser_b
AB
AC
最终SQL实现
select 
    case when t1.from_user < t1.to_user then t1.from_user else t1.to_user end as user_a,
    case when t1.from_user < t1.to_user then t1.to_user else t1.from_user end as user_b
from 
    follow t1
join 
    follow t2
on 
    t1.from_user = t2.to_user 
    and t1.to_user = t2.from_user
where 
    t1.from_user < t1.to_user;

三、其他方法

select
    least(user_a, user_b) as user_id,
    greatest(user_a, user_b) as friend_id
from follow
group by least(user_a, user_b), greatest(user_a, user_b)
having count(*) >= 2;

http://www.kler.cn/a/557764.html

相关文章:

  • 八股文实战之JUC:静态方法的锁和普通方法的锁
  • go json处理 encoding/json 查询和修改gjson/sjson
  • java开发工程师面试技巧
  • 对计算机中缓存的理解和使用Redis作为缓存
  • LeetCode 2506.统计相似字符串对的数目:哈希表+位运算
  • Trae+Qt+MSVC环境配置
  • 运筹说 第132期 | 矩阵对策的基本理论
  • PostgreSQL:更新字段慢
  • 索引与Redis 知识点
  • 易飞ERP查询报表提示:报表档的字段数为21但要写到报表档的字段数为42;报表没有信息;;
  • 策略模式介绍和代码示例
  • 对Revit事务机制的一些推测
  • Webpack的基本功能有哪些
  • 负载均衡集群( LVS 相关原理与集群构建 )
  • RT-Thread+STM32L475VET6——icm20608传感器
  • 可变参数学习
  • 论文略:ACloser Look into Mixture-of-Experts in Large Language Models
  • 详解单例模式、模板方法及项目和源码应用
  • 基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)
  • Linux提权篇之内核提权(三)