day14_好友申请I:总体通过率

一、题目

两张表

1、FriendRequest表

表里面数据不唯一

有以下三个字段:

sender_id,发送请求的用户id

send_to_id,接受请求的用户id

send_date,请求日期

2、RequestAccepted表

表里面数据不唯一

有以下三个字段:

requester_id,发送请求的用户id

accepter_id,接受请求的用户id

accept_date,接受请求的日期

二、题目要求

求好友申请的通过率:

1、用接受好友申请的数目除以申请总数

2、通过的好友申请不一定都在FriendRequest表中

3、一个好友申请者可能会给接受者发多次好友申请,一个好友申请也有可能被通过好几次,这种情况接受和申请都只算一次

3、没有好友申请,则返回accept_rate为0.00

三、示例

1、从FriendRequest表看

(sender_id,send_to_id)这两个字段组合值没有重复的数据,申请表有5条数据 ,那么好友申请数量至少是5条

2、再看RequestAccepted表里面的(sender_id,send_to_id)组合数据都在FriendRequest表里面,没有额外不存在于FriendRequest表的好友申请,所以好友申请数目是5

3、看好友申请通过的数目,看RequestAccepted表里面

(sender_id,send_to_id)组合不重复的数据有4条,所以好友接受请求的数量是5

4、好友通过率 = 好友接受请求的数量 / 好友申请的数量,也就是4/5=0.8,保留两位小数就是0.80

四、分析

通过的好友申请不一定都在FriendRequest表中:

1、这句话如果是说好友申请不一定都通过,那么好友申请数目就可以直接在FriendRequest表查

2、如果这句话的意思是通过的好友申请可能在FriendRequest表里面没有,那么好友申请数目就得在FriendRequest表和RequestAccepted表里查

看题目的意思是第一种

①先从FriendRequest 表找出好友申请总数

select count(distinct sender_id,send_to_id) as request_num from  FriendRequest

②从RequestAccepted表找出申请通过的数量

select count(distinct requester_id,accepter_id) as accept_num from  RequestAccepted

③用上面两段sql作为两个临时表,用申请通过数量/好友申请总数,保留两位小数用round(exp,2)

五、sql实现

with tmp1 as(

select count(distinct sender_id,send_to_id) as request_num from  FriendRequest

),

tmp2 as (

select count(distinct requester_id,accepter_id) as accept_num from  RequestAccepted

)

select round(ifnull(accept_num/request_num,0) ,2) as accept_rate

from tmp1,tmp2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值