news 2026/4/23 9:21:35

力扣597-好友申请I:总体通过率

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣597-好友申请I:总体通过率

表:FriendRequest

+----------------+---------+ | Column Name | Type | +----------------+---------+ | sender_id | int | | send_to_id | int | | request_date | date | +----------------+---------+ 该表可能包含重复项(换句话说,在SQL中,该表没有主键)。 该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求的日期。

表:RequestAccepted

+----------------+---------+ | Column Name | Type | +----------------+---------+ | requester_id | int | | accepter_id | int | | accept_date | date | +----------------+---------+ 该表可能包含重复项(换句话说,在SQL中,该表没有主键)。 该表包含发送请求的用户的 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

思路:

第一步,计算分母:发出的好友请求总数(去重后)。在 FriendRequest 表中,一条请求由 (sender_id, send_to_id) 唯一确定。先用 distinct 对这两个字段去重,得到所有唯一的请求对;再对去重后的结果 count(*),得到请求总数 num,这就是接受率的分母。

第二步,计算分子:被接受的请求总数(去重后)。在 RequestAccepted 表中,一条接受记录由 (requester_id, accepter_id) 唯一确定。同样先 distinct 去重,再 count(*) 得到 accept_num,这就是接受率的分子。

第三步,计算接受率并处理边界情况。接受率 = accept_num / num。若 num 为 0(说明没有任何好友请求),直接做除法会产生除零问题,也不符合业务含义,因此约定返回 0.00。最后按照题目要求保留两位小数,使用 round(…, 2) 进行四舍五入。

SQL 中把分母子查询记为 t1、分子子查询记为 t2。由于两者各自都会返回一行(一个计数值),将它们在 FROM 中并列(等价于 CROSS JOIN)后仍然只会得到一行结果,从而可以在同一行里完成 accept_num / num 的计算。

代码:

select case when t1.num=0 then round(0,2) else round(t2.accept_num/t1.num,2) end as accept_rate from ( select count(*) as num from (select distinct sender_id,send_to_id from FriendRequest) tmp )t1, ( select count(*) as accept_num from (select distinct requester_id,accepter_id from RequestAccepted) tmp )t2
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 4:55:31

36、SONET与ATM协议详解

SONET与ATM协议详解 1. 同步光网络(SONET) 1.1 帧同步加扰器 帧同步加扰器的伪随机比特流 (S_i) 与数据比特流 (D_i) 进行异或运算,得到加扰后的比特流 (X_i) 并发送到网络。接收端使用相同的伪随机比特流进行解扰。为了使发送端和接收端的伪随机比特流同步,通过检测帧字…

作者头像 李华
网站建设 2026/4/10 23:39:12

还在手动部署?掌握这4种模式,实现Open-AutoGLM Agent全自动上线

第一章:Open-AutoGLM Agent全自动部署概述 Open-AutoGLM Agent 是一款基于大语言模型的自动化智能体部署框架,旨在实现从模型加载、环境配置到服务启动的全流程无人工干预。该系统通过预定义的部署策略与动态资源调度机制,能够在多种云环境中…

作者头像 李华
网站建设 2026/4/21 9:51:54

Web安全中SQL注入绕过WAF的具体手法和实战案例

在Web安全领域,绕过WAF进行SQL注入是一项复杂的挑战,其核心在于利用WAF检测逻辑与后端SQL解析之间的差异。下面我将结合具体案例,为你梳理主要的绕过手法。🔍 基础绕过手法这类手法主要针对WAF的简单匹配规则,是绕过尝…

作者头像 李华
网站建设 2026/4/8 3:49:49

20、嵌入式软件开发:框架、测试与优化

嵌入式软件开发:框架、测试与优化 在嵌入式软件开发领域,高效的开发流程和可靠的测试策略是确保项目成功的关键因素。下面将探讨几个重要方面,包括引导加载程序框架的优势、常见的软件框架(如 FAT 文件系统)、API 设计的进一步思考以及嵌入式软件测试的相关内容。 引导加…

作者头像 李华
网站建设 2026/4/22 17:46:24

仅限内部流传的清言插件调试秘籍:Open-AutoGLM性能优化的7个关键点

第一章:清言插件架构与Open-AutoGLM核心机制清言插件系统基于模块化设计理念,构建了一套灵活可扩展的运行时环境,支持第三方开发者通过标准接口接入AI能力。其核心在于Open-AutoGLM协议,该协议定义了插件注册、上下文感知调用与动…

作者头像 李华
网站建设 2026/4/14 19:51:11

快速搭建专属在线考试平台源码系统 带完整的搭建部署教程以及源代码包

温馨提示:文末有资源获取方式许多培训机构和企业面临线上化门槛高、技术开发难、成本投入大的困境。一套功能完备、开箱即用的在线答题考试系统源码,为您提供了破局之钥。它让您无需组建技术团队,即可快速拥有一个专业的、属于自己的线上教学…

作者头像 李华