【力扣白嫖日记】602.好友申请II:谁有最多的好友

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

602.好友申请II:谁有最多的好友
表:RequestAccepted

列名类型
requester_idint
accepter_idint
accept_datedate

(requester_id, accepter_id) 是这张表的主键(具有唯一值的列的组合)。
这张表包含发送好友请求的人的 ID ,接收好友请求的人的 ID ,以及好友请求通过的日期。

编写解决方案,找出拥有最多的好友的人和他拥有的好友数目。生成的测试用例保证拥有最多好友数目的只有 1 个人。

进阶:在真实世界里,可能会有多个人拥有好友数相同且最多,你能找到所有这些人吗?


我那不值一提的想法:

  • 首先梳理表内容,题干一共给了一张请求表,记录了发送请求id,接受者id,接受日期
  • 其次分析需求,需要找到拥有最多好友的人和他拥有的好友数量
  • 首先查好友数量,通过这个表我们可以观察到,好友的数量=requester_id的数量+accepter_id的数量,这里我们可以通过别查询requester_id的数量和accpter_id的数量
  • 然后再使用union all 连接所有的结果,就能得到用户接受好友的数量,以及用户被接受好友的数量
  • 最后再将结果建立成临时表,从临时表里面查询结果。
select requester_id as id,sum(num) as num 
from 
(
    select requester_id,count(requester_id) as num
    from RequestAccepted
    group by requester_id
    union all
    select accepter_id,count(accepter_id) as num 
    from RequestAccepted
    group by accepter_id
) as a 
group by requester_id
order by num desc
limit 1

对于进阶版来说,就是可能会有多种情况,我觉得最简单的方法就是再加一层嵌套,然后去掉limit1,将好友数量的所有结果保存到一张临时表中,然后嵌套查询,条件就是where num =
(select max(num) from 临时表)

with temp as (
    select requester_id as id,sum(num) as num 
    from 
    (
        select requester_id,count(requester_id) as num
        from RequestAccepted
        group by requester_id
        union all
        select accepter_id,count(accepter_id) as num 
        from RequestAccepted
        group by accepter_id
    ) as a 
    group by requester_id
    order by num desc
)
select id,num 
from temp
where num = (select max(num) from temp)

结果:

在这里插入图片描述


总结:

能运行就行。


  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值