西安网站建设孙正学,河北建设工程招标网官方网站,广州大厂有哪些,汕尾北京网站建设前言
练习sql语句#xff0c;所有题目来自于力扣#xff08;https://leetcode.cn/problemset/database/#xff09;的免费数据库练习题。
今日题目#xff1a;
603.连续空余座位 表#xff1a;Cinema
列名类型seat_idintfreebool
Seat_id 是该表的自动递增主键列。 在…前言
练习sql语句所有题目来自于力扣https://leetcode.cn/problemset/database/的免费数据库练习题。
今日题目
603.连续空余座位 表Cinema
列名类型seat_idintfreebool
Seat_id 是该表的自动递增主键列。 在 PostgreSQL 中free 存储为整数。请使用 ::boolean 将其转换为布尔格式。 该表的每一行表示第 i 个座位是否空闲。1 表示空闲0 表示被占用。
查找电影院所有连续可用的座位。 返回按 seat_id 升序排序 的结果表。 我那不值一提的想法
首先梳理表内容题干一共给了一张电影表记录了座位id以及座位是否空缺其次分析需求需要得到两个以上的座位连续可用这道题最简单的方法当然是自连接但是不够灵活这里我们使用row_number(),row_number()解决连续问题以前已经写过了这里就不细写了 https://blog.csdn.net/dkmaa/article/details/136302362?spm1001.2014.3001.5506 下面就是完整代码
with rk as(select seat_id,free,seat_id - row_number() over(partition by free order by seat_id) as rk_rankfrom Cinemawhere free 1
)select seat_id
from rk
where rk_rank in ( select rk_rankfrom rk group by free,rk_rankhaving count(*) 2
)结果 总结
能运行就行。