目录

  • 一、题目
  • 二、解决
    • 1、join
    • 2、row_number() over()
    • 3、变量
  • 三、参考

一、题目

表: Cinema

+-------------+------+
| Column Name | Type |
+-------------+------+
| seat_id     | int  |
| free        | bool |
+-------------+------+
Seat_id是该表的自动递增主键列。
该表的每一行表示第i个座位是否空闲。1表示空闲,0表示被占用。

编写一个SQL查询来报告电影院所有连续可用的座位。

返回按 seat_id 升序排序 的结果表。

测试用例的生成使得两个以上的座位连续可用。

查询结果格式如下所示。

示例 1:

输入:
Cinema 表:
+---------+------+
| seat_id | free |
+---------+------+
| 1       | 1    |
| 2       | 0    |
| 3       | 1    |
| 4       | 1    |
| 5       | 1    |
+---------+------+
输出:
+---------+
| seat_id |
+---------+
| 3       |
| 4       |
| 5       |
+---------+

二、解决

1、join

思路:

只有一张表,需要通过seat_id自己连自己,条件是abs(c1.seat_id - c2.seat_id) = 1。
代码:

selectdistinct c1.seat_id
from cinema c1 join cinema c2
on abs(c1.seat_id - c2.seat_id) = 1 and c1.free = 1 and c2.free = 1
order by c1.seat_id;

2、row_number() over()

思路:

S1:使用窗口函数 row_number 对 cinema 进行排序,seat_id - row_number() over() as k ,如果座位连续,这组 k 值应该是相等的。
S2:将第一步和第二步的结果作为临时表 temp,将临时表 temp 按照 k 进行分组查询,并且筛选出大于 2 的 k 值
S3:从临时表 temp 中查询出 seat_id ,筛选出 k 值在第四步中的值

代码:

with temp as (selectseat_id,seat_id - row_number() over() as kfrom cinema where free = 1
)
select seat_id from temp where k in (select k from temp group by k having count(*) >= 2
);

3、变量

思路:

方法二中使用窗口函数的地方替换成了 case … when … then … end 的形式

在运行第一条数据时不会,不会进入第一个 when 子句中,它会进入第二个 when 子句。第二个 when 子句的作用是对 @pre_free 和 @pre_seat_id 进行初始化
当运行第二条数据时,就会进入第一个 when 子句,不会进入第二个 when 子句了。第一个 when 子句中会判断 @pre_free (上一数据 free)和 free (当前的 free) 是否相等,并且 free 是等于 1 的,输出 @pre_seat_id (上一条数据的 seat_id)

代码:

with temp as (selectseat_id,casewhen @pre_free = free and free = 1 then @pre_seat_idwhen @pre_free:=free then @pre_seat_id:=seat_idend as kfrom cinema, (select @pre_free:=null, @pre_seat_id:=null) init
)
select seat_id from temp where k in (select k from temp group by k having count(*) >= 2
);

三、参考

1、三种方法——解连续空余的座位(笛卡尔积/窗口函数/case when …)

【LeetCode-SQL】603. 连续空余座位相关推荐

  1. leetcode简单之603.连续空余座位

    表: Cinema Column Name Type seat_id int free bool Seat_id是该表的自动递增主键列. 该表的每一行表示第i个座位是否空闲.1表示空闲,0表示被占用. ...

  2. LeetCode 603.连续空余座位

    数据准备 drop table Cinema;Create table If Not Exists Cinema (seat_id int primary key auto_increment, fr ...

  3. 【LC简单】603. 连续空余座位

    ❤️博客主页: 楚生辉 ❤️系列专栏:[LeetCode刷题] ❤️一句短话: 坚持不懈,孜孜不倦 1.题目描述 表: Cinema +-------------+------+ | Column N ...

  4. 603. 连续空余座位

    这题就是找到至少连续两个空位(布尔值为true) 这种题目一看到要养成条件反射,一个是id差为1,一个就是复表的使用,最后要去重. 给出代码: SELECT DISTINCT a.seat_id FR ...

  5. ​LeetCode刷题实战603:连续空余座位

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. leetcode603. 连续空余座位(SQL)

    几个朋友来到电影院的售票处,准备预约连续空余座位. 你能利用表 cinema ,帮他们写一个查询语句,获取所有空余座位,并将它们按照 seat_id 排序后返回吗? | seat_id | free ...

  7. leetcode-SQL-603. 连续空余座位

    leetcode-SQL-603. 连续空余座位 题目 解题 方法一:笛卡尔积 题目 题目链接 表: Cinema +-------------+------+ | Column Name | Typ ...

  8. Leetcode_603. 连续空余座位

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

  9. 【持续更新】Leetcode SQL题目全解析(附建表sql)

    Leetcode SQL题目全解析 越前须知(雾) 题目Q & A 175 组合两个表 181 超过经理收入的员工 182 查找重复电子邮箱 183 从不订购的用户 197 上升的温度 511 ...

最新文章

  1. 并查集(压缩路径+按秩排序)
  2. java 线程相关的属性介绍
  3. .WM_CTLCOLOR和OnCtlColor消息的用法
  4. 信号处理之DFT、IDFT
  5. 性能媲美BERT却只有其1/10参数量? | 近期最火模型ELECTRA解析
  6. TMS320 C6000系列 DSP之 CCS5.5 仿真调试
  7. oracle禁止自动启动命令,自动启动和关闭Oracle 脚本
  8. 汇编语言 修改内存中的过时数据
  9. 分布式文件系统(HDFS)与 linux系统文件系统 对比
  10. .NET生成静态页面并分页
  11. 3.5英寸万转硬盘的末路(万转“偏瘫”记连载二)
  12. 多目标跟踪之数据关联算法——匈牙利算法
  13. 桌面版whatsapp自动发送实例分析
  14. 云顶之弈服务器维护多长时间,英雄联盟3.17更新维护时间介绍 云顶之弈什么时候可以玩_18183云顶之弈专区...
  15. 关于机器人方面的sci论文_机器人领域国际期刊(SCI收录)
  16. 用c语言实现窗口化,c怎么窗口化只能开挂吗
  17. 【Kotlin 初学者】字符串常用操作汇总
  18. linux系统nginx安装教程,Linux下Nginx安装教程
  19. 抖音短视频矩阵系统/源码/系统搭建
  20. 在领悟到什么道理后,你的人生从此轻松了起来?

热门文章

  1. ClickHouse压缩率
  2. win10 6种截图方法 简介
  3. android 平板z97,高清配置 翰智Z97-W通话版平板评测
  4. 2019华北五省计算机应用大赛官网,软件学院学生在2019年华北五省(市、自治区)及港澳台大学生计算机应用大赛(河北赛区)中喜获佳绩...
  5. 2020牛客暑期多校训练营(第七场)J.Pointer Analysis
  6. Verilog消除毛刺
  7. 功不唐捐—— 程序员职场第一课 后记
  8. 2021-02-06
  9. Power up! 这三个小时IBM都讲了些啥?
  10. 版本控制管理工具Git/SVN