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.hqwc.cn/news/255152.html

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

相关文章

祝大雪节气安康,大雪动态表情包图片带字祝福大全,大雪快乐暖心问候祝福语

1、大雪节气&#xff0c;送你防寒秘笈&#xff1a;1、天寒地冻防路滑;2、寒风呼啸防感冒;3、寒气袭人防哮喘;4、戴上耳套防冻耳;5、戴上手套防冻手;6、穿上棉鞋防冻脚;7、多喝开水防上火。8、加强锻炼防疾患。祝健康快乐。 2、奉天承运&#xff0c;皇帝诏曰&#xff1a;大雪节气…

Rook-ceph(1.12.9最新版)

官网的步骤 git clone --single-branch --branch v1.12.9 https://github.com/rook/rook.git cd rook/deploy/examples kubectl create -f crds.yaml -f common.yaml -f operator.yaml kubectl create -f cluster.yaml整理后的已经替换好的国内镜像的 git clone https://gite…

家政小程序源码,师傅竞价接单

家政预约上门服务小程序开发方案&#xff0c;php开发语言&#xff0c;前端是uniapp&#xff0c;有成品源码&#xff0c;可以二开&#xff0c;可以定制。 一家政小程序用户端功能&#xff1a;服务分类、在线预约、在线下单。 师傅端&#xff1a;在线接单&#xff0c;竞价&…

浏览器开发者工具使用(F12)

F12 第一个按钮&#xff1a;停止和开启按钮&#xff0c;默认是开启抓包 第二个按钮&#xff1a;清空抓包记录 第三个按钮&#xff1a;过滤器&#xff0c;可以通过搜索想要的关键字 第四个按钮&#xff1a;保留日志&#xff08;建议必须勾上&#xff0c;不然有些跳转页面无法…

python-sql-spark常用操作

数据抽取提速&#xff1a; 1. 不要把rdd或者df展示出来&#xff0c;只有第一遍跑流程的时候看看中间结构&#xff0c;后面就只保存不展示。 2. 尽量使用spark.sql&#xff0c;而不是rdd。sql处理groupby会快很多。基本上10min的rdd&#xff0c;sql只需2min。所以基本除了复杂…

体育类直播介绍

体育类直播是指以体育比赛为主题的网络直播&#xff0c;包括各种类型的体育赛事&#xff0c;如足球、篮球、网球、赛车等。这种类型的直播内容通常由主播对体育赛事进行实时解说和评论&#xff0c;吸引观众的关注和互动。 在体育类直播中&#xff0c;主播通常会选择自己擅长和…

三种基于路径跟踪的位相解包裹算法比较

目录 1. 枝切法(Branch Cut&#xff0c;简称 BC) 2 质量图导向的路径跟踪算法(Quality Guide&#xff0c;简称QG) 3 菱形算法(Rhombus Alogrithm&#xff0c;简称 RA) 1. 枝切法(Branch Cut&#xff0c;简称 BC) 美国的 JPL实验室的 Goldstein和 Zebker等人在1986年提出的枝…

【玩转TableAgent 数据智能分析】-- 数据分析不再是专业人士的专利

文章目录 前言一、TableAgent介绍TableAgent 数据分析智能体融合创新应用的新成果Table Family 二、注册TableAgent访问TableAgent注册用量 三、 体验TableAgent样例数据集体验选择样例数据集样例数据集进行数据分析数据图 样例数据集进行数据分析规定图表格式数据图 自定义数据…

多人群聊代码

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

Pacifist:一款专为技术开发者打造的软件提取工具

对于技术开发者而言&#xff0c;有效且便捷的工具可以显著提高工作效率。Pacifist&#xff0c;作为一款专业的软件提取工具&#xff0c;专为技术开发者而设计&#xff0c;旨在提供简单、安全的软件提取和管理工作。 一、Pacifist的技术特点 Pacifist主要采用AppleScript作为其…

3、Linux_系统用户管理

1.Linux 用户管理 1.1概述 Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。root用户是系统默认创建的管理员账号。 1.2添加用户 语法 useradd […

Windows离线安装Node-Red

在线安装Node-Red 参考文章 步骤 安装Nodejs使用nmp安装Node-Red先在本地安装Node-red将本地的Node-red拷贝到远程 安装Nodejs 在nodejs中文网下载长期支持的Windows安装包&#xff0c;并进行安装 安装完成后为nodej添加环境变量&#xff0c;环境变量的地址为安装目录。 …