【力扣刷题日记】597.好友申请I:总体通过率

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

597.好友申请I:总体通过率
表:FriendRequest

列名类型
sender_idint
send_to_idint
request_datedate

该表可能包含重复项(换句话说,在SQL中,该表没有主键)。该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求的日期。

表:RequestAccepted

列名类型
requester_idint
accepter_idint
accept_datedate

该表可能包含重复项(换句话说,在SQL中,该表没有主键)。该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求通过的日期。

求出好友申请的通过率,用 2 位小数表示。通过率由接受好友申请的数目除以申请总数。

提示:

通过的好友申请不一定都在表 friend_request 中。你只需要统计总的被通过的申请数(不管它们在不在表 FriendRequest 中),并将它除以申请总数,得到通过率
一个好友申请发送者有可能会给接受者发几条好友申请,也有可能一个好友申请会被通过好几次。这种情况下,重复的好友申请只统计一次。
如果一个好友申请都没有,你应该返回 accept_rate 为 0.00 。


我那不值一提的想法:

  • 首先梳理表内容,题干一共给了两张表,一张好友申请表,记录了发送请求的id,接受请求的id,日期。一张接收表,记录了请求id,接受id,接受的日期。
  • 其次分析需求,需要找到好友申请的通过率
  • 思路简单,就是第二张表的非重复值/第一张表的非重复值
  • 这道题只需要注意没有主键,需要用两个参数来共同查询就可以了。
select 
ifnull(
    round(
        (select count(distinct requester_id,accepter_id) from RequestAccepted)
        /
        count(distinct sender_id,send_to_id)
        ,2)
    ,0) as accept_rate
from FriendRequest

结果:

在这里插入图片描述


总结:

能运行就行。


  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值