【SQL周周练】一句 SQL 如何帮助 5 个人买到电影院最好的座位?
大家好,我是“蒋点数分”,多年以来一直从事数据分析工作。从今天开始,与大家持续分享关于数据分析的学习内容。
本文是第 3 篇,也是【SQL 周周练】系列的第 3 篇。该系列是挑选或自创具有一些难度的 SQL 题目,一周至少更新一篇。后续创作的内容,初步规划的方向包括:
后续内容规划
1.利用 Streamlit 实现 Hive 元数据展示
、SQL 编辑器
、 结合Docker 沙箱实现数据分析 Agent
2.时间序列异常识别、异动归因算法
3.留存率拟合、预测、建模
4.学习 AB 实验
、复杂实验设计等
5.自动化机器学习
、自动化特征工程
6.因果推断
学习
7. ……
欢迎关注,一起学习。
第 3 期题目
题目来源:改进的题目,增加了电影院最优选座的逻辑
一、题目介绍
看到这个题目,有同学可能会吐槽:你小子拉了,第 3 期就出现常见题目。这里我解释一下,【SQL 周周练】系列的确是想输出一系列我认为有挑战性有意思的题(所谓挑战性是对于大多数数分,SQL 资深者除外)我不想照搬 LeetCode 或牛客的题,更不想写 “学生表” 那类题。
奈何我想象力有限(未来可能增加一个 SQL 破案系列,目前手里有几篇草稿,比如通过行车轨迹计算罪案策划地点)对于市面上的题,如果增加一些创新点,我觉得也值得跟大家分享。比如这道题,我就增加了“最优选座”的逻辑。下面直接说题:
有一张表记录了电影院某个厅某个场次的座位售出情况,假设有 5 个人来买票,请您用 SQL 输出所有可以选择的 5 个连续座位,还要按照一定规则根据座位的位置进行优劣排序。列名如下(这里不显示日期、放映厅名和场次等冗余信息):
列名 | 数据类型 | 注释 |
---|---|---|
seat_no | string | 座位号(格式:行号码-列号码) |
is_saled | int | 是否售出(0-未销售,1-已售出) |
说明:
- 为了简化问题,假设不存在“过道”(以后有机会再"水"一篇文章)
- 为了简化问题,“最优选座”的逻辑是——最优点在(总行数*0.65,总列数*0.5)所选座位相对于它的“欧式距离”(行方向与列方向的权重比是 3:2)之和最小者
二、题目思路
想要答题的同学,可以先思考答案