MYSQL练题笔记-高级查询和连接-最后一个能进入巴士的人

一、题目相关内容

1)相关的表和题目

2)帮助理解题目的示例,提供返回结果的格式

二、自己初步的理解

一群人要上巴士但是巴士有体重限制,那只能有限个人才能上去

最后输出这个最后一个上去还不超重的人的名字

我认为首先要缩小记录数,只有能上车的人先出现,但是我想不到怎么才能做到。于是还是老老实实看题解吧。                          

三、题解展示和分析

1.官方题解

SELECT a.person_name

FROM Queue a, Queue b

WHERE a.turn >= b.turn

GROUP BY a.person_id HAVING SUM(b.weight) <= 1000

ORDER BY a.turn DESC

LIMIT 1

分析题解过程如下:

1)又是自连接也是交叉连接,通过每个人和其他所有人连接,找到自己在里面的位置,留下之前人和自己即可。

2)将每个人进行分组。

3)现在利用每个分组里自己和之前人的体重之和看看是否大于1000。

真的太巧妙了,这样就筛选出来了

自己回忆和思考的这个题解如下,

select a.person_name from queue a,queue b where a.turn>=b.turn group by a.person_id having sum(b.weight)<=1000 order by b.turn desc limit 1;

并提交上去的时候显示解答错误,如下图,但是由于这个测试用例比较长不方便看,我就如下图添加了下测试用例就在右下角全部显示出来了,然后发现自己的答案和正确答案有区别,order by的字段是不一样的,发现我的是b.turn,正确答案是a.turn。

我筛选出的结果是第16个名字teach前面一个名字,正确答案是后面的名字dragon。

评论区有人问了为什么排序的字段是a.turn,有一个解答但是我还是不理解,怎么想都想不出来,有大佬知道为什么吗?

2.不用自连接的方式,用窗口函数,如下

select person_name

from(select turn,person_name,sum(weight) over(order by turn) as cumu_weight from Queue) t

where cumu_weight <= 1000

order by turn desc

limit 1

sum()over()这个函数如果我之前知道的话,也是倾向于这一种方法的,因为一直猜测有没有函数能做这样的操作。

这个题解的核心就是子查询,利用这个窗口函数把turn排序后的累积相加的体重作为一个字段即可

3.加几个题解里有的不同于上面两个的,等着以后思考

select person_name from Queue q1 where (select sum(weight) from Queue where turn <= q1.turn) <= 1000 order by turn desc limit 1;

select person_name from(select  turn, person_name, sum(weight) over(order by turn) as cumu_weight from Queue) t where cumu_weight <= 1000 order by turn desc limit 1;

四、总结

官方题解有一个不理解的地方,要等着以后思考了,会了sum()overover()窗口函数,多多思考!!

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

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

相关文章

HarmonyOS 开发基础(二)Image

HarmonyOS 开发基础&#xff08;二&#xff09;Image Entry Component struct Index {// 创建一个状态变量 img 存储 img 网络地址State img: string https://img1.baidu.com/it/u4049022245,514596079&fm253&app138&sizew931&n0&fJPEG&fmtauto?sec1…

创建vue项目:node.js下载安装、配置环境变量,下载安装cnpm,配置npm的目录、镜像,安装vue、搭建vue项目开发环境(保姆级教程一)

今天讲解 Windows 如何创建 vue 项目&#xff0c;搭建 vue 开发环境&#xff0c;这是这个系列的第一章&#xff0c;有什么问题请留言&#xff0c;请点赞收藏&#xff01;&#xff01;&#xff01; 文章目录 一、Vue简单介绍二、开始搭建1、安装node.js环境2、配置npm下载时的默…

1、Redis变慢原因排查(上)

感觉Redis变慢了&#xff0c;这些可能的原因你查了没 &#xff1f;(上) Redis 作为一款业内使用率最高的内存数据库&#xff0c;其拥有非常高的性能&#xff0c;单节点的QPS压测能达到18万以上。但也正因此如此&#xff0c;当应用访问 Redis 时&#xff0c;如果发现响应延迟变…

QT----Visual Studio输入中文报错,常量中有换行符

问题描述 在VS中写qt时发现在标题中输入了中文直接把报错无法运行 解决方法1 修改文件的编码方式。在VS菜单栏 工具->自定义-》命令-》选择文件-》添加高级保存选项命令。 双加选中添加中文的文件&#xff0c;文件-》高级保存选项-》修改utf-8就可以运行了 解决方法2…

AMD 发布新芯片MI300,支持训练和运行大型语言模型

AMD 宣布推出 MI300 芯片&#xff0c;其 Ryzen 8040移动处理器将于2024年用于笔记本电脑。 AMD官方网站&#xff1a;AMD ׀ together we advance_AI AMD——美国半导体公司专门为计算机、通信和消费电子行业设计和制造各种创新的微处理器&#xff08;CPU、GPU、主板芯片组、电…

电脑搜不自己的手机热点,其余热点均可!

一、现象&#xff1a; 之前可正常连接&#xff0c;突然间发现收不到自己的WiFi信号&#xff0c;其余人均可收到。通过重复手机电脑关机、改变热点设置中的频段等方式均没解决&#xff0c;同事电脑和手机可搜索到我的WiFi。 二、问题&#xff1a; WiF驱动程序更新 三&#x…

字节开源的netPoll底层LinkBuffer设计与实现

字节开源的netPoll底层LinkBuffer设计与实现 为什么需要LinkBuffer介绍设计思路数据结构LinkBufferNodeAPI LinkBuffer读 API写 APIbook / bookAck api 小结 本文基于字节开源的NetPoll版本进行讲解&#xff0c;对应官方文档链接为: Netpoll对应官方文档链接 netPoll底层有一个…

【python、opencv】opencv仿射变换原理及代码实现

opencv仿射变换原理 仿射变换是opencv的基本知识点&#xff0c;主要目的是将原始图片经过仿射变换矩阵&#xff0c;平移、缩放、旋转成目标图像。用数学公式表示就是坐标转换。 其中x&#xff0c;y是原始图像坐标&#xff0c;u&#xff0c;v是变换后的图像坐标。将公式转换为…

idea__SpringBoot微服务03——yaml(新注解)(新的依赖)

yaml 一、数据格式二、注入配置文件&#xff08;yaml注入&#xff09;&#xff08;新注解ConfigurationProperties&#xff09;三、注入配置文件&#xff08;properties注入&#xff09;&#xff08;新注解PropertySource&#xff09;四、yaml配置文件占位符${}五 、yaml跟prop…

kettle作业发送@163邮件

版本&#xff1a;20231207 用kettle做一个简单的邮件发送 使用模块 start、转换、邮件 在start设置好你需要的时间 在转换中随便添加一个你之前保存的一个任务 重点在邮件设置上 1.邮件的地址 2.邮件的服务器 这里最重要的一点就是发件人验证的第三方接入密码&#xff0c;这…

WEB组态编辑器(BY组态)介绍

BY组态是一款非常优秀的纯前端的【web组态插件工具】&#xff0c;可无缝嵌入到vue项目&#xff0c;react项目等&#xff0c;由于是原生js开发&#xff0c;对于前端的集成没有框架的限制。同时由于BY组态只是一个插件&#xff0c;不能独立运行&#xff0c;必须嵌入到你方软件平台…

国科大超大规模集成电路设计针对期末考试的复习

基本概念 物理综合Physical synthesis 从RTL代码创建正确的布局布线电路,相当于跳过了逻辑门级表示&#xff0c;直接从数据流阶段到了版图阶段。 等效门equivalent gate 一个等效门是指一个二输入的与非门&#xff0c;这里的等效不是指功能上的等效&#xff0c;而是芯片面积…

深度学习疫情社交安全距离检测算法 - python opencv cnn 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习疫情社交安全距离检测算法 ** 该项目较为新颖&#xff0c;适合作为竞赛…

Android hook式插件化详解

引言 Android插件化是一种将应用程序的功能模块化为独立的插件,并动态加载到主应用程序中的技术。通过插件化,开发者可以将应用程序的功能分解成独立的模块,每个模块可以作为一个插件单独开发、测试和维护,然后通过动态加载的方式集成到主应用程序中,实现功能的动态扩展和…

功能测试,接口测试,自动化测试,压力测试,性能测试,渗透测试,安全测试,具体是干嘛的?

软件测试是一个广义的概念&#xff0c;他包括了多领域的测试内容&#xff0c;比如&#xff0c;很多新手可能都听说&#xff1a;功能测试&#xff0c;接口测试&#xff0c;自动化测试&#xff0c;压力测试&#xff0c;性能测试&#xff0c;渗透测试&#xff0c;安全测试等&#…

CentOS系统中设置反向代理服务器的步骤

在CentOS系统中设置反向代理服务器可以帮助你隐藏原始服务器的细节&#xff0c;并提高服务器的安全性。以下是在CentOS系统中设置反向代理服务器的步骤概述&#xff1a; 安装反向代理软件&#xff1a; 常见的反向代理软件包括Nginx和Apache。你可以选择其中之一来作为你的反向…

【Git】error:failed to push some refs to ‘git@gitee.com:name/project.git‘

错误展示 今天在版本回退的时候&#xff0c;推送到gitee显示如下错误 先执行了git pull origin master&#xff0c;然后再执行push操作&#xff0c;也没有用 解决办法 执行git push -f origin master ,-f 表示强制推送。 结果 问题解决啦&#xff01;

区分node,npm,nvm

目录 一&#xff0c;nodejs二&#xff0c;npm三&#xff0c;nvm 区分node&#xff0c;npm&#xff0c;nvm 几年前学习前端的时候学习的就是htmlcssjs 三件套。 现在只学习这些已经不能满足需要了。 一&#xff0c;nodejs nodejs是编程语言javascript运行时环境。&#xff08;比…

项目架构-六边形架构的概述和实现

使用传统的分层架构&#xff0c;我们的所有依赖项都指向一个方向&#xff0c;上面的每一层都依赖于下面的层。传输层将依赖于交互器&#xff0c;交互器将依赖于持久层。 在六边形架构中&#xff0c;所有依赖项都指向内部——我们的核心业务逻辑对传输层或数据源一无所知。尽管如…

【深度学习】强化学习(一)强化学习定义

文章目录 一、强化学习问题1、交互的对象1. 智能体&#xff08;Agent&#xff09;2. 环境&#xff08;Environment&#xff09; 2、强化学习的基本要素1. 状态 &#x1d460;2. 动作 &#x1d44e;3. 策略 &#x1d70b;(&#x1d44e;|&#x1d460;)4. 状态转移概率 &#x1…