牛客_非技术快速入门_题目总结

牛客_非技术快速入门_题目总结

SQL29 计算用户的平均次日留存率

描述

题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。

示例:question_practice_detail
id device_id quest_id result date
1 2138 111 wrong 2021-05-03
2 3214 112 wrong
2021-05-09
3 3214 113 wrong
2021-06-15
4 6543 111 right 2021-08-13
5 2315 115 right
2021-08-13
6 2315 116 right
2021-08-14
7 2315 117 wrong
2021-08-15
……
根据示例,你的查询应返回以下结果:
avg_ret
0.3000

思路

概率计算:第二天刷题的天数/用户刷题天数总和
第二天刷题的条件筛选表示:datediff(date1, date2)=1
初步思路用连接查询q1,q2分别表示第一天、第二天:连接条件q1.device_id=q2.device_id and datediff(q2.date,q1.date)=1。如果使用内连接,则可能出现q1和q2在连接时由于datediff(q2.date,q1.date)=1条件导致部分天数被筛掉,无法统计总天数。所以这里需要用外连接。
第二天刷题的天数:正常想q2表示第二天,则表示为count(q2.date)。但是细想连接时,可能出现用户可能做了不止一题的问题,这时q2.date就会重复。说明,同一个用户的date可能会重复。这时需要对(q1.device_id,q1.date)去重。

select count(distinct q2.device_id,q2.date)/count(distinct q1.device_id,q1.date) as avg_ret
from question_practice_detail as q1 left outer join question_practice_detail as q2 
on q1.device_id=q2.device_id and datediff(q2.date,q1.date)=1;

SQL33 找出每个学校GPA最低的同学

描述

题目:现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。

示例:user_profile
id device_id gender age university gpa active_days_within_30 question_cnt
answer_cnt

1 2138 male 21 北京大学 3.4 7 2 12
2 3214 male 复旦大学 4 15 5 25
3 6543 female 20 北京大学 3.2 12 3 30
4 2315 female 23 浙江大学 3.6 5 1 2
5 5432 male 25 山东大学 3.8 20 15 70
6 2131 male 28 山东大学 3.3 15 7 13
7 4321 female 26 复旦大学 3.6 9 6 52
根据示例,你的查询结果应参考以下格式,输出结果按university升序排序:
device_id university gpa
6543 北京大学 3.2000
4321 复旦大学 3.6000
2131 山东大学 3.3000
2315 浙江大学 3.6000

思路

如果只查询学校和最低GPA使用group bymin即可结束战斗。但是,需要查询相应的id。此时对于又要查询统计信息又要查询基础信息(非group by下的字段),可以用子查询,但稍显复杂。这里引入窗口函数来解决问题。

窗口函数

遇到既要分组统计数据又要查询原始数据行的情况下,使用MySql的窗口函数。窗口函数用于在查询结果中执行聚合、排序和分析操作,同时保留原始数据的行。窗口函数允许您在不对查询结果进行分组的情况下,根据特定的窗口(或框架)来计算值。

语法
function_name() OVER ([PARTITION BY partition_expression][ORDER BY order_expression [ASC | DESC]][window_frame_clause]
) AS alias
  • function_name(): 要应用的聚合函数或分析函数,如 SUM(), AVG(), ROW_NUMBER(),RANK(), 等等。
  • PARTITION BY partition_expression: 可选项,类似于group by根据指定的表达式对结果集进行分区,使窗口函数在每个分区内进行计算。
  • ORDER BY order_expression [ASC | DESC]: 可选项,指定对窗口内的行进行排序,以便窗口函数能够基于排序顺序计算结果。
  • window_frame_clause: 可选项,用于定义窗口的范围或框架,例如确定窗口中要包含的行的范围。
  • alias: 可选项,定义窗口函数的输出列的别名。
示例

表结构和数据

CREATE TABLE students (student_id INT PRIMARY KEY,student_name VARCHAR(50),subject VARCHAR(50),score INT,class_id INT
);INSERT INTO students (student_id, student_name, subject, score, class_id)
VALUES(1, 'Alice', 'Math', 85, 101),(2, 'Bob', 'Math', 90, 101),(3, 'Charlie', 'Math', 75, 102),(4, 'David', 'Science', 88, 102),(5, 'Emma', 'Science', 92, 103),(6, 'Frank', 'English', 80, 103),(7, 'Grace', 'English', 85, 102);

使用 ROW_NUMBER() 计算每个学生的行号

SELECTstudent_name,subject,score,class_id,ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num
FROM students;

结果:

+--------------+---------+-------+----------+---------+
| student_name | subject | score | class_id | row_num |
+--------------+---------+-------+----------+---------+
| Emma         | Science | 92    | 103      | 1       |
| Bob          | Math    | 90    | 101      | 2       |
| David        | Science | 88    | 102      | 3       |
| Grace        | English | 85    | 102      | 4       |
| Alice        | Math    | 85    | 101      | 5       |
| Frank        | English | 80    | 103      | 6       |
| Charlie      | Math    | 75    | 102      | 7       |
+--------------+---------+-------+----------+---------+

使用 RANK() 计算每个科目分数的排名(允许并列排名)

SELECTstudent_name,subject,score,class_id,RANK() OVER (PARTITION BY subject ORDER BY score DESC) AS subject_rank
FROM students;

结果:

+--------------+---------+-------+----------+--------------+
| student_name | subject | score | class_id | subject_rank |
+--------------+---------+-------+----------+--------------+
| Bob          | Math    | 90    | 101      | 1            |
| Alice        | Math    | 85    | 101      | 2            |
| Charlie      | Math    | 75    | 102      | 3            |
| Emma         | Science | 92    | 103      | 1            |
| David        | Science | 88    | 102      | 2            |
| Grace        | English | 85    | 102      | 1            |
| Frank        | English | 80    | 103      | 2            |
+--------------+---------+-------+----------+--------------+

使用 SUM() 计算每个班级累计总分

SELECTstudent_name,subject,score,class_id,SUM(score) OVER (PARTITION BY class_id) AS class_total_score
FROM students;

结果:

+--------------+---------+-------+----------+-----------------+
| student_name | subject | score | class_id | class_total_score |
+--------------+---------+-------+----------+-----------------+
| Alice        | Math    | 85    | 101      | 175             |
| Bob          | Math    | 90    | 101      | 175             |
| Charlie      | Math    | 75    | 102      | 163             |
| David        | Science | 88    | 102      | 163             |
| Grace        | English | 85    | 102      | 163             |
| Emma         | Science | 92    | 103      | 172             |
| Frank        | English | 80    | 103      | 172             |
+--------------+---------+-------+----------+-----------------+

再回到原题:

select device_id, university, gpa from (select device_id, university, gpa, row_number() over (partition by university order by gpa) as rn from user_profile) rk where rn = 1 order by university;

SQL35 浙大不同难度题目的正确率

描述

题目:现在运营想要了解浙江大学的用户在不同难度题目下答题的正确率情况,请取出相应数据,并按照准确率升序输出。

示例: user_profile
id device_id gender age university gpa active_days_within_30
question_cnt
answer_cnt

1 2138 male 21 北京大学 3.4 7 2 12
2 3214 male 复旦大学 4 15 5 25
3 6543 female 20 北京大学 3.2 12 3 30
4 2315 female 23 浙江大学 3.6 5 1 2
5 5432 male 25 山东大学 3.8 20 15 70
6 2131 male 28 山东大学 3.3 15 7 13
7 4321 female 26 复旦大学 3.6 9 6 52
示例: question_practice_detail
id device_id question_id result
1 2138 111 wrong
2 3214 112 wrong
3 3214 113 wrong
4 6543 111 right
5 2315 115 right
6 2315 116 right
7 2315 117 wrong

示例: question_detail
question_id difficult_level
111 hard
112 medium
113 easy
115 easy
116 medium
117 easy

根据示例,你的查询应返回以下结果:
difficult_level correct_rate
easy
0.5000
medium
1.0000

思路

正确率:正确题数/总做题数。

select c.difficult_level, count(case b.result when 'right' then 1 else null end)/count(*) correct_rate from user_profile a, question_practice_detail b, question_detail c where a.device_id = b.device_id and b.question_id = c.question_id and a.university = "浙江大学" group by c.difficult_level order by correct_rate;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@Transaction注解详情解释

概念: Transactional注解是Spring框架提供的一个用于声明式事务管理的注解,方便我们管理事务,保证数据的一致性与可靠性。 事务4个基本特性: 原子性:一个事务要不全部(sql)执行;要不…

Python图形界面(GUI)Tkinter笔记(四):控件的定位(2)

Tkinter(GUI)设计图形界面时有三种控件的包装方法去定位各控件在窗口(父容器、根窗口)上的位置。 【1】pack()方法:用方位来定位位置,类似于Word文档中的文字对齐方式。 【2】grid()方法:用二维表格式的坐标值定位,类似于EXCEL单元格坐标。 【3】place()方法:用窗口…

华为ce12800文件保存python之sftp

##CE12800 交换机上配置 [*SSH Server] dsa local-key-pair create [*SSH Server] sftp server enable [*SSH Server] ssh user adminadmin authentication-type password [*SSH Server] ssh user adminadmin service-type sftp [*SSH Server] ssh user adminadmin sftp-direc…

【机器学习】 技术栈和开发环境搭建

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 博客目录 技术栈编程语言库框架编辑器项目IDE …

linux下的进程通信

进程通信 进程为什么需要通信呢?进程通信的技术背景进程通信本质 进程通信分类管道匿名管道pipe匿名管道原理管道特点 命名管道创建命名管道命名管道原理 System V IPC管道与 System V的区别共享内存函数ftok()shmget() shmat()shmdt()shmctl()删除共享内存System V…

探索数据结构(让数据结构不再成为幻想)

目录 什么是数据结构 数据与结构 什么是算法 复杂度分析 时间复杂度与空间复杂度 时间复杂度 思考: 空间复杂度 常数阶O(1) 对数阶O(logn) 线性阶O(n) 以下为空间复杂度为O(n) 线性对数阶O(nlogn) 平方阶O(n) 指数阶O(2^n) 什么是数据结构 数据结构…

WHAT - CSS Animationtion 动画系列(二)

目录 一、循环波浪二、关键帧呼应三、关键帧顺接四、利用 transform-origin 做拉伸五、大元素可拆分多个小元素联动六、预留视觉缓冲七、随机感:动画周期设置八、抛物线:两个内外div实现x和y向量运动 今天我们主要学习动画实现要素。 一、循环波浪 利用…

类加载机制(双亲委派机制)

文章目录 JVM的作用是什么双亲委派机制加载流程 JVM的作用是什么 我们运行Java程序时,要安装JDK,JDK包含JVM,不同环境的JDK都是不同的。 Java 代码在编译后会形成 class 的字节码文件,该字节码文件通过 JVM 解释器,生…

音视频-H264编码封装- MP4格式转Annex B格式

目录 1:H264语法结构回顾 2:H264编码补充介绍 3:MP4模式转Annex B模式输出到文件示例 1:H264语法结构回顾 在之前文章里介绍过H264的语法结构。 传送门: 视音频-H264 编码NALU语法结构简介 2:H264编码补充介绍 H…

泽众财务RPA机器人常见五个应用场景

泽众RPA(即机器人流程自动化,Robotic Process Automation, RPA)解决方案是依托于各类先进信息技术手段的虚拟劳动力 (数字劳动力),根据预先设定的程序操作指令对任务进行自动化处理,实现业务流程…

网络安全等级保护的发展历程

1994年国务院147号令第一次提出,计算机信息系统实行安全等级保护,这也预示着等保的起步。 2007年《信息安全等级保护管理办法》的发布之后。是等保在各行业深耕落地的时代。 2.0是等保版本的俗称,不是等级。等保共分为五级,二级…

fastapi 结合 celery 将异步过程转变为同步过程

使用 asyncio 的协程方式查询任务结果,查询超时时间为 120 s,每 200 ms 查询一次: # 使用 asyncio 的协程方式查询任务结果,查询超时时间为 120 s,每 200 ms 查询一次 router.post(/backgroud_type, response_modelBac…

JeeSite V5.7.0 发布,Java快速开发平台,Vite5、多项重构重磅升级

JeeSite V5.7.0 发布,Java快速开发平台,Vite5、多项重构重磅升级 升级内容 新增 参数配置 IP 地址黑白名单过滤器动态参数 新增 侧边栏是否展开第一个菜单的开关 first-open 新增 AesTypeHandler 处理字段数据加密解密或脱敏 新增 JsonTypeHandler …

AI换脸原理(7)——人脸分割参考文献TernausNet: 源码解析

1、介绍 这篇论文相对来说比较简单,整体是通过使用预训练的权重来提高U-Net的性能,实现对UNet的改进。该方法也是DeepFaceLab官方使用的人脸分割方法。在介绍篇我们已经讲过了UNet的网络结构和设计,在进一步深入了解TernausNet之前,我们先简单回顾下UNet。 U-Net的主要结构…

网络基础(三)——网络层

目录 IP协议 1、基本概念 2、协议头格式 2.1、报头和载荷如何有效分离 2.2、如果超过了MAC的规定,IP应该如何做呢? 2.3、分片会有什么影响 3、网段划分 4、特殊的ip地址 5、ip地址的数量限制 6、私有ip地址和公网ip地址 7、路由 IP协议 网络…

Docker尚硅谷_高级篇

Docker尚硅谷 高级篇一、Dockerfile1.1 Dockerfile1.2 构建过程1.3 Dockerfile保留字1.3 构建镜像1.4 虚悬镜像 二、Docker发布微服务2.1 搭建SpringBoot项目2.2 发布微服务项目到Docker容器 三、Docker网络3.1 Docker网络3.2 docker网络命令3.3 Docker网络模式3.4 docker03.5 …

sql注入之bool盲注

目录 盲注步骤 1、进入靶场 2、如下图所示输入?id1‘ 判断此时存在注入点 3、判断列数 ​编辑 4、开始盲注 普通的python脚本 代码思想 结果 二分查找python脚本 二分查找算法思想简介 二分查找与普通查找的主要差距 代码思想 代码 结果​编辑 下面以…

后端项目开发笔记

Maven打包与JDK版本不对应解决方法 我这里使用jdk8。 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configurat…

趣味软件-吃什么(Eat What)?

&#x1f354;&#x1f35c;&#x1f355; 你是否也有这样的日常烦恼&#xff1f; 每天的“世纪难题”——今天吃什么&#xff1f; &#x1f570;️ 饭点到了&#xff0c;脑袋空空&#xff0c;选择困难症大爆发&#xff01; &#x1f46b; 和女朋友约会&#xff0c;却不知道她的…

代码随想录算法训练营第四十八天|121. 买卖股票的最佳时机,122.买卖股票的最佳时机II

目录 121. 买卖股票的最佳时机思路代码 122.买卖股票的最佳时机II思路代码 121. 买卖股票的最佳时机 题目链接&#xff1a;121. 买卖股票的最佳时机 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;动态规划之 LeetCode&#xff1a;121.买卖股票的最佳时机1 思路 采用二…