力扣602(MySQL)-好友申请Ⅱ:谁有最多的好友(中等)

发布时间 2023-03-31 11:09:03作者: 我不想一直当菜鸟

题目:

在 Facebook 或者 Twitter 这样的社交应用中,人们经常会发好友申请也会收到其他人的好友申请。

RequestAccepted 表:

(requester_id, accepter_id) 是这张表的主键。
这张表包含发送好友请求的人的 ID ,接收好友请求的人的 ID ,以及好友请求通过的日期。

问题
写一个查询语句,找出拥有最多的好友的人和他拥有的好友数目。

生成的测试用例保证拥有最多好友数目的只有 1 个人。

示例:

输入:

RequestAccepted 表:

 输出:

 解释:
编号为 3 的人是编号为 1 ,2 和 4 的人的好友,所以他总共有 3 个好友,比其他人都多。

解题思路:

 使用union all不去重连接:

①先将两张表不去重连接;

1 select requester_id id from request_accepted_602
2 union all
3 select accepter_id id from request_accepted_602

 ②再使用group by 按照id进行分组,然后select 里统计出每个id出现的次数,再按次数进行降序排序,最后limit 1。

1 select id,count(*) as num
2 from (
3     select requester_id id from request_accepted_602
4     union all
5     select accepter_id id from request_accepted_602
6     ) t
7 group by id
8 order by num DESC
9 limit 1

  小知识:

①SQL的书写顺序:

select =>  from  => join => on => where => group by => having => union => order by => limit

②SQL的执行顺序:

from =>  on  => join => where => group by =>  having => select  => union => order by => limit

③count(*),count(1)和count(字段)

count(*)和count(1)执行效果上没有区别,会统计列值为null的所有行数,只是在执行效率上有区别。

count(字段):只包含列名的列,统计表中出现该字段的次数,并且不统计字段为null的情况。