前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL语句练习二

SQL语句练习二

作者头像
Mandy的名字被占用了
发布2021-08-06 13:26:14
3030
发布2021-08-06 13:26:14
举报
文章被收录于专栏:菜鸟成长学习笔记

大家好,从今天开始个人公众号也开启每日刷题的文章了。每日都会分享一道数据库相关的练习试题。题目可能很简单,也可能很难。

在每天的试题中,都会记录个人的解题思路。如果你有好的解题思路,也可以评论留言。如果存在不足的地方,也欢迎指正。

题目描述:

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

代码语言:javascript
复制
| seat_id | free |
|---------|------|
| 1       | 1    |
| 2       | 0    |
| 3       | 1    |
| 4       | 1    |
| 5       | 1    |

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

代码语言:javascript
复制
| seat_id |
|---------|
| 3       |
| 4       |
| 5       |

seat_id 字段是一个自增的整数,free 字段是布尔类型('1' 表示空余, '0' 表示已被占据)。连续空余座位的定义是大于等于 2 个连续空余的座位。

解题思路

解决此题的关键在于,连续并且是空位的。从题干中很简单的能看出,空位都是用1表示,我们只需要查询出free字段是1的即可。难点在于连续的情况如何查询,由于题中提及到,只要是2个连续的编号(seat_id)就代表是连续的,从这一点就可以得出如下示例图:

此图的表示含义如下:

假设,编号为1的位置可选,这时候,第二个位置可以是编号为1,2,3,4,5的。

假设,编号为2的位置可选,这时候,第二个位置可以是编号为1,2,3,4,5的。

。。。。。。

假设,编号为5的位置可选,这时候,第二个位置可以是编号为1,2,3,4,5的。这样我们就不难想到这是一种笛卡尔积的计算方式,我们这里使用连表查询,得出笛卡尔积数据,在根据free是1的数据即可。

解答方法

代码语言:javascript
复制
select distinct a.seat_id
from cinema a join cinema b
  on abs(a.seat_id - b.seat_id) = 1
  and a.free = 1 and b.free = 1
order by a.seat_id;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡二条的技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 解题思路
  • 解答方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档