如何用 SQL 找到最受欢迎的用户?

[复制链接]
发表于 2025-7-27 09:57:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在社交网络或好友关系体系中,“最受欢迎的用户” 通常是拥有最多好友的人。如何通过 SQL 快速找到这样的用户呢?本文将通过一个简洁的 SQL 查询办理这个问题。
602. 好友申请 II :谁有最多的好友 - 力扣(LeetCode)

数据表结构

假设我们有一个好友请求记载表 RequestAccepted,结构如下:
字段名形貌requester_id请求者用户 IDaccepter_id接受者用户 ID 每行数据表示一条好友请求被接受的记载。例如:
requester_idaccepter_id121323  
目标

找到好友数量最多的用户,并返回其 ID 和好友数量。
办理方案

通过以下 SQL 查询实现:
  1. WITH Friends AS (
  2.     -- 合并所有用户的“好友关系”ID(包括请求者和接受者)
  3.     SELECT requester_id AS id
  4.     FROM RequestAccepted
  5.     UNION ALL
  6.     SELECT accepter_id AS id
  7.     FROM RequestAccepted
  8. )
  9. -- 统计每个用户的好友数量,并取最大值
  10. SELECT id, COUNT(*) AS num
  11. FROM Friends
  12. GROUP BY id
  13. ORDER BY num DESC
  14. LIMIT 1;
复制代码
分步剖析

步调 1:合并所有好友关系

使用 UNION ALL 将 请求者(requester_id) 和 接受者(accepter_id) 的 ID 合并到一个列表中:
 
  1. SELECT requester_id AS id FROM RequestAccepted
  2. UNION ALL
  3. SELECT accepter_id AS id FROM RequestAccepted
复制代码


  • UNION ALL 会保存重复记载(例如用户 1 多次添加好友)。
  • 效果示例:
       id1123
步调 2:统计好友数量

按用户 ID 分组,统计每个用户的总出现次数(即好友数量):
  1. SELECT id, COUNT(*) AS num
  2. FROM Friends
  3. GROUP BY id
复制代码


  • COUNT(*) 统计每个用户出现的总次数。
  • 效果示例:
       idnum122231
步调 3:排序并取最大值

按好友数量降序排列,取第一名:
  1. ORDER BY num DESC
  2. LIMIT 1;
复制代码
 
最终效果:
idnum12 技能细节


  • 为什么用 UNION ALL 而不是 UNION?

    • UNION ALL 保存重复记载,确保正确统计所有好友关系。
    • UNION 会去重,导致计数不准确。

  • LIMIT 1 的注意事项

    • 如果有多个用户并列第一,此查询只会返回此中一个。
    • 若需要返回所有并列用户,可移除 LIMIT 并在应用层处理。

 
总结

通过 合并请求方和接受方的用户 ID 并统计出现次数,我们能够快速找到最受欢迎的用户。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表