数据导入:
Create table If Not Exists RequestAccepted (requester_id int not null, accepter_id int null, accept_date date null);
Truncate table RequestAccepted;
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');
在 Facebook 或者 Twitter 这样的社交应用中,人们经常会发好友申请也会收到其他人的好友申请。
RequestAccepted
表:
写一个查询语句,找出拥有最多的好友的人和他拥有的好友数目。
生成的测试用例保证拥有最多好友数目的只有 1 个人。
查询结果格式如下例所示。
示例:
解题思路:
with cte as
(select
requester_id as id
from RequestAccepted
union all
select
accepter_id
from RequestAccepted)
# 子查询筛选(group by having count >= all)
select
id,
count(*) as num
from cte
group by id
having count(*) >= all(select count(*) from cte group by id)
# order by limit 1
select
id,
count(*) as num
from cte
group by id
order by num desc
limit 1
# 窗口函数
select
id,num
from
(select
id,
count(*) as num,
dense_rank() over(order by count(*) desc) as rnk
from cte
group by id) t
where rnk=1
;
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/friend-requests-ii-who-has-the-most-friends
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。