力扣603(MySQL)-连续空余座位(简单)
题目:
几个朋友来到电影院的售票处,准备预约连续空余座位。
你能利用表 cinema ,帮他们写一个查询语句,获取所有空余座位,并将它们按照 seat_id 排序后返回吗?

对于如上样例,你的查询语句应该返回如下结果。

注意:
seat_id 字段是一个自增的整数,free 字段是布尔类型(‘1’ 表示空余, ‘0’ 表示已被占据)。
连续空余座位的定义是大于等于 2 个连续空余的座位。
解题思路:
建表语句:
1 create table if not EXISTS cinema_603 (seat_id int(3),free tinyint(1));
2 TRUNCATE table cinema_603;
3 insert into cinema_603 values(1,1),(2,0),(3,1),(4,1),(5,1);
这题与前面的 力扣601-体育馆的人的流量 思路一致,使用等差的思想,用连续座位号 - 排行,若是连续的,差值一定相同,再统计相同差值的个数即可。
①先筛选出free非0的数据,再给筛选后的数据以id进行连续排序,然后计算id与排序号的差值;
1 select seat_id,free,seat_id - dense_rank() over(order by seat_id) as rnk
2 from cinema_603
3 where free = 1;

②再以第一步查询到的rnk分组,统计差值相同的个数;
1 select seat_id,count(seat_id) over (partition by rnk) as cout
2 from (
3 select seat_id,free,seat_id - dense_rank() over(order by seat_id) as rnk
4 from cinema_603
5 where free = 1
6 ) as temp1

③根据上一步的查询结果,筛选出cout >= 2的数据,再按seat_id升序排列输出即可。
1 select seat_id
2 from (
3 select seat_id,count(seat_id) over (partition by rnk) as cout
4 from (
5 select seat_id,free,seat_id - dense_rank() over(order by seat_id) as rnk
6 from cinema_603
7 where free = 1
8 ) as temp1
9 ) as temp2
10 where cout >= 2
11 order by seat_id;

注意:
我做这道题的时候突然在想一个问题:使用row_number() over()来排序是不是更好一点,但是这两题都是以id来排序的,id不会重复,故用rank() over()、 dense_rank() over()、row_number() over()任何一种都可以。
小知识:
rank() over():是按over()里面的字段进行跳跃排序,比如:1,2,2,4,...

dense_rank() over():是按over()里面的字段进行连续排序,比如:1,2,2,3,...

row_number() over():是按over()里面的字段进行连续排序,比如:1,2,3,4,...

力扣603(MySQL)-连续空余座位(简单)的更多相关文章
- [LeetCode]603. 连续空余座位(Mysql、自连接)
题目 几个朋友来到电影院的售票处,准备预约连续空余座位. 你能利用表 cinema ,帮他们写一个查询语句,获取所有空余座位,并将它们按照 seat_id 排序后返回吗? | seat_id | fr ...
- 力扣485. 最大连续1的个数-C语言实现-简单题
题目 [题目传送门] 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3 ...
- 力扣566. 重塑矩阵-C语言实现-简单题
题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
- 力扣832. 翻转图像-C语言实现-简单题
题目 传送门 文本 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...
- 刷题-力扣-剑指 Offer 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de ...
- 力扣561. 数组拆分 I-C语言实现-简单题
题目 传送门 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(a ...
- 力扣896. 单调数列-C语言实现-简单题
题目 传送门 文本 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j, ...
- mysql学习 | LeetCode数据库简单查询练习
力扣:https://leetcode-cn.com/ 力扣网数据库练习:https://leetcode-cn.com/problemset/database/ 文章目录 175. 组合两个表 题解 ...
- 力扣算法题—069x的平方根
实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...
随机推荐
- pod探针的三种类型及三种检测方式
Pod探针是Kubernetes中的一种机制,用于检测Pod中的容器是否正常运行.它主要有三种类型:存活探针(LivenessProbe).就绪探针(ReadinessProbe)和启动探针(Star ...
- C++ allocator类
new在申请内存时,他将内存分配和对象的构造放在了一起,delete也将对象的析构和内存的释放结合在一起.但allocator类允许将内存分配和对象构造分开. 分配内存 allocator<st ...
- 今日学习:位运算&中国剩余定理
-2^ 31的补码是-0.也就是 1000 0000 0000 0000 0000 0000 0000 0000 补码是原码取反加1 x&(-x) 是最低位为1的位为1,其余位为0. 中国剩余 ...
- 3DCAT首届行业生态交流会|燧光CTO 戴景文:云渲染 XR大发展的助推器
2021年12月17日下午,由深圳市瑞云科技有限公司主办,深圳市虚拟现实产业联合会协办的 云XR如何赋能元宇宙--3DCAT实时云渲染首届行业生态合作交流会 圆满落幕.此次活动围绕"云XR如 ...
- Flutter Utils 全网最齐全的工具类
FlutterUtils 目录介绍 01.事件通知bus工具类 02.颜色Color工具类 03.日期转化工具类 04.File文件工具类 05.Sql数据库工具类 06.Json转化工具类 07.L ...
- Solon Web 文件上传的最佳实践
文件上传是 Web 开发中最常见的一个应用场景.一般在处理数据时,会有两种常见的方案:直接把文件流放在内存里,或者把文件流先缓冲到磁盘. 1.如果是高频且文件极小 使用纯内存模式,默认即可.如果高频小 ...
- WPF命令绑定
在WPF中有时候不想将命令写在List中,但是却要在前端绑定的List中写入命令 暂时知道两种解决方法 1. Command="{Binding DataContext.NavicateCo ...
- 借助Numpy,优化Pandas的条件检索代码
Numpy其实是最早的处理数据的Python库,它的核心ndarray对象,是一个高效的n维数组结构. 通过这个库,可以高效的完成向量和矩阵运算,由于其出色的性能,很多其他的数据分析,科学计算或者机器 ...
- 如何用LOTO示波器实测LC串联谐振?
一个电感和一个电容串联,在某个特定的频率,就会发生谐振,这个频率就是谐振频率.串联谐振电路有如下特点: 谐振时整个电路阻抗呈电阻性,阻抗最小,电流达到最大: 谐振时电感和电容两端的电压达到最大. 上图 ...
- KingbaseES V8R6 等待事件之IO类BufFileRead BufFileWrite
等待事件含义 当数据库创建临时文件时,会发生IO:BufFileRead和IO:BufFileWrite等待事件.当操作需要的内存比当前定义的work_mem内存参数更多时,会将临时数据写入磁盘永久存 ...