表:FriendRequest+----------------+---------+| Column Name | Type |+----------------+---------+| sender_id | int || send_to_id | int || request_date | date |+----------------+---------+此表没有主键,它可能包含重复项。该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求的日期。表:RequestAccepted+----------------+---------+| Column Name | Type |+----------------+---------+| requester_id | int || accepter_id | int || accept_date | date |+----------------+---------+此表没有主键,它可能包含重复项。该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求通过的日期。写一个查询语句,求出好友申请的通过率,用 2 位小数表示。通过率由接受好友申请的数目除以申请总数。提示:通过的好友申请不一定都在表friend_request中。你只需要统计总的被通过的申请数(不管它们在不在表FriendRequest中),并将它除以申请总数,得到通过率一个好友申请发送者有可能会给接受者发几条好友申请,也有可能一个好友申请会被通过好几次。这种情况下,重复的好友申请只统计一次。如果一个好友申请都没有,你应该返回accept_rate为 0.00 。查询结果应该如下例所示。示例 1:输入:FriendRequest 表:+-----------+------------+--------------+| sender_id | send_to_id | request_date |+-----------+------------+--------------+| 1 | 2 | 2016/06/01 || 1 | 3 | 2016/06/01 || 1 | 4 | 2016/06/01 || 2 | 3 | 2016/06/02 || 3 | 4 | 2016/06/09 |+-----------+------------+--------------+RequestAccepted 表:+--------------+-------------+-------------+| requester_id | accepter_id | accept_date |+--------------+-------------+-------------+| 1 | 2 | 2016/06/03 || 1 | 3 | 2016/06/08 || 2 | 3 | 2016/06/08 || 3 | 4 | 2016/06/09 || 3 | 4 | 2016/06/10 |+--------------+-------------+-------------+输出:+-------------+| accept_rate |+-------------+| 0.8 |+-------------+解释:总共有 5 个请求,有 4 个不同的通过请求,所以通过率是 0.80进阶:你能写一个查询语句得到每个月的通过率吗?你能求出每一天的累计通过率吗?来源:力扣(LeetCode)链接:https://leetcode.cn/problems/friend-requests-i-overall-acceptance-rate
#测试数据Create table If Not Exists FriendRequest (sender_id int, send_to_id int, request_date date);Create table If Not Exists RequestAccepted (requester_id int, accepter_id int, accept_date date);insert into FriendRequest (sender_id, send_to_id, request_date) values ('1', '2', '2016/06/01');insert into FriendRequest (sender_id, send_to_id, request_date) values ('1', '3', '2016/06/01');insert into FriendRequest (sender_id, send_to_id, request_date) values ('1', '4', '2016/06/01');insert into FriendRequest (sender_id, send_to_id, request_date) values ('2', '3', '2016/06/02');insert into FriendRequest (sender_id, send_to_id, request_date) values ('3', '4', '2016/06/09');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');insert into RequestAccepted (requester_id, accepter_id, accept_date) values ('3', '4', '2016/06/10');
withtmp1 as (selectcount(distinct concat(sender_id,'@',send_to_id)) all_cntfrom FriendRequest),tmp2 as (selectcount(distinct concat(requester_id,'@',accepter_id)) accept_cntfrom RequestAccepted)selectround(case when a.all_cnt = 0 then 0 else coalesce(b.accept_cnt,0)/a.all_cnt end,2) accept_ratefrom tmp1 aleft join tmp2 bon 1 = 1;

笔试题合集免费领取方法
方法一:关注公众号【跟强哥学SQL】,回复关键字【力扣】获取链接。
方法二:访问SQL网页面:https://sql.wang/sql-leetcode/sql-exercise
文章转载自跟强哥学SQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




