力扣 SQL 602. 好友申请 II :谁有最多的好友

该问题是一个SQL查询挑战,要求找出在给定的数据表`RequestAccepted`中,拥有最多好友的用户及其好友数量。通过统计作为发送好友请求者和接受者时的记录数,然后合并并按好友总数降序排列,最终获取最多好友的用户信息。
摘要由CSDN通过智能技术生成

力扣 SQL 602. 好友申请 II :谁有最多的好友

题目 : https://leetcode.cn/problems/friend-requests-ii-who-has-the-most-friends/

数据

Create table If Not Exists RequestAccepted (
  requester_id int not null comment '发送好友请求ID', 
  accepter_id int null comment '接收好友ID', 
  accept_date date null comment '通过的日期'
)

insert into RequestAccepted (requester_id, accepter_id, accept_date) values ('1', '2', '2016/06/03')
insert into RequestAccepted (requester_id, accepter_id, accept_date) values ('1', '3', '2016/06/08')
insert into RequestAccepted (requester_id, accepter_id, accept_date) values ('2', '3', '2016/06/08')
insert into RequestAccepted (requester_id, accepter_id, accept_date) values ('3', '4', '2016/06/09')

需求

查询有最多的好友的人和他拥有的好友数目

查询结果 :

| id | num |
| 3  | 3   |

解决

思路 :

  1. 求发送好友的总数, 通过时间不能为空
  2. 求接收好友的总数
  3. 对俩结果进行水平拼接
  4. 根据id 进行聚合求和,排序求最高的好友总数
-- 水平拼接发送好友总数,接收好友总数
with t1 as (
  select requester_id as id,
    count(*) as ct
  from RequestAccepted
  where accept_date is not null
  group by requester_id
  union all
  select accepter_id as id,
    count(*) as ct
  from RequestAccepted
  where accept_date is not null
  group by accepter_id
)
-- 求和,求top1
select id,
  sum(ct) as num
from t1
group by id
order by num desc
limit 1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值