前言
练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。
今日题目:
597.好友申请I:总体通过率
表:FriendRequest
列名 | 类型 |
---|---|
sender_id | int |
send_to_id | int |
request_date | date |
该表可能包含重复项(换句话说,在SQL中,该表没有主键)。该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求的日期。
表:RequestAccepted
列名 | 类型 |
---|---|
requester_id | int |
accepter_id | int |
accept_date | date |
该表可能包含重复项(换句话说,在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
结果:
总结:
能运行就行。