SQL进阶技巧:火车票相邻座位预定一起可能情况查询算法 ?

目录

0  场景描述

1 数据准备

2 问题分析

2.1 分析函数法

2.2 自关联求解

3 小结

如果觉得本文对你有帮助,那么不妨也可以选择去看看我的数字化建设通关指南博客专栏 ,或许对你更有用。专栏原价99,现在活动价29.9,按照阶梯式增长,直到恢复原价。


0  场景描述

假设是 3 个朋友一起坐高铁出去玩,希望能预定到相邻的座位。现在这趟车某个车厢里每排的座位的编号是 A、B、C、D、F,其中,A 和 F 是靠窗位置,C 和 D 之间是过道。即使隔着过道,C 和 D 仍是可以看作是相邻的座位。求三个人能预定到一起的座位情况?

seats 是座位预定表,表结构如下:

CREATE TABLE `seats` (`id` int unsigned NOT NULL AUTO_INCREMENT,`row_no` int DEFAULT NULL COMMENT '第几排',`seat` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '座位',`status` int NOT NULL COMMENT '预定状态 0-未预定 1-已预定',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8

其中,id 是主键,从 1 起连续递增。

seats 表的数据:

 id        row_no  seat          status  1       1       A              12       1       B              13       1       C              04       1       D              05       1       F              06       2       A              17       2       B              08       2       C              09       2       D              010       2       F              011       3       A              012       3       B              113       3       C              114       3       D              015       3       F              0

1 数据准备

create table seat as (select stack(15,1, 1, 'A', 1,2, 1, 'B', 1,3, 1, 'C', 0,4, 1, 'D', 0,5, 1, 'F', 0,6, 2, 'A', 1,7, 2, 'B', 0,8, 2, 'C', 0,9, 2, 'D', 0,10, 2, 'F', 0,11, 3, 'A', 0,12, 3, 'B', 1,13, 3, 'C', 1,14, 3, 'D', 0,15, 3, 'F', 0) as (id, row_num, seat, status))
;

 

2 问题分析

2.1 分析函数法

 第一步:获取相邻3个座位的各种组合情况

(1)过滤掉已预定的座位

(2)利用自增id进行相邻判断

(3)找出连续相邻的三个座位并组合一起

      注意此处必须座位编号是连续的,为了找出连续的3个座位我们使用了窗口子句,此时窗口的范围应该使用range子句而不是rows,利用range进行逻辑上的计算来判断是否连续。

具体SQL如下:

select id, row_num, seat, status, collect_list(seat) over (partition by row_num order by id range between current row and 2 following) seat_strfrom seatwhere status != 1

 

第二步:找出数组长度为3的组合,即为最终结果

最终SQL如下:

select row_num, concat_ws(',', seat_str) seat_str
from (select id, row_num, seat, status, collect_list(seat)over (partition by row_num order by id range between current row and 2 following) seat_strfrom seatwhere status != 1) t
where size(seat_str) = 3
;

2.2 自关联求解

步骤1:获取同一排中所有相邻的三个座位

SELECT a.row_num row_num, a.seat, b.seat
FROM seat a,seat b
where a.row_num = b.row_numand a.id + 2 = b.idand a.status = 0and b.status = 0

步骤2: 将相邻的座位组合

select row_num,concat_ws('~', a_seat, b_seat) seat_str
from (SELECT a.row_num row_num, a.seat    a_seat, b.seat    b_seatFROM seat a,seat bwhere a.row_num = b.row_numand a.id + 2 = b.idand a.status = 0and b.status = 0) t

 

3 小结

本文给出了一种火车票相邻座位预定一起可能情况查询算法 ,采用了两种思路进行求解,一种利用分析函数,采用窗口子句range进行逻辑计算相邻情况,一种利用自关联的形式,控制关联条件进行求解。

如果觉得本文对你有帮助,那么不妨也可以选择去看看我的数字化建设通关指南博客专栏 ,或许对你更有用。专栏原价99,现在活动价29.9,按照阶梯式增长,直到恢复原价。


部分内容如下:
(1)SQL进阶实战技巧
可以参考如下教程,具体链接如下

SQL很简单,可你却写不好?也许这才是SQL最好的教程

上面链接中的文章及技巧会不定期更新。

(2)数仓建模实战技巧和个人心得
       1)新人入职新公司后应如何快速了解业务?

       2)以业务视角看宽表化建设?

       3)  维度建模 or 关系型建模?

       4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?

       5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系                           该由谁来搭建?

       6)如何优雅设计DWS层?DWS层模型好坏该如何评价?

       7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?

       8) 数据架构的选择,mpp or hadoop?

       9)数仓团队应如何体现自己的业务价值,讲好数据故事?

       10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关                          系?

       11)数据部门如何与业务部门沟通,并规划指引业务需求?

文章不限于以上内容,有新的想法也会及时更新到该专栏。

具体专栏链接如下:

数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/140611.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

COSMOSPANDA星际熊猫助阵长江商学院高尔夫周年庆典

在金秋送爽的美好时节,星际漫游(广州)品牌管理有限公司旗下备受欢迎的潮玩IP“COSMOSPANDA星际熊猫”与长江商学院深圳校友会强强联手,于9月10日在风景如画的中山雅居乐长江高尔夫球会成功举办了“长江商学院深圳校友会高尔夫球队…

论文速递!Knowledge-driven+Informer! 联合知识和数据驱动的混合模型,用于NOx排放浓度预测

论文标题:Prediction of NOx emission concentration from coal-fired power plant based on joint knowledge and data driven 期刊信息:Energy (中科院1区, JCR Q1 TOP, IF9) 引用:Wu Z, Zhang Y, Dong Z. Prediction of NOx emission co…

【Android Studio】API 29(即Android 10)或更高版本,在程序启动时检查相机权限,并在未获取该权限时请求它

文章目录 1. 在AndroidManifest.xml文件中&#xff0c;声明相机权限&#xff1a;2. 在你的Activity中&#xff08;例如MainActivity&#xff09;测试 1. 在AndroidManifest.xml文件中&#xff0c;声明相机权限&#xff1a; <uses-feature android:name"android.hardwar…

win11下面graphviz的用法

安装 安装graphviz 2.38版本 控制面板在变量path中增加E:\software\Graphviz\bin example.dot代码 digraph SignalPathway {node [fontname"SimHei"];edge [fontname"SimHei"];// 定义节点形状node [shapecircle];// 定义节点CellA [label"细胞 A&…

【Elasticsearch系列五】Java API

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Autosar E2E通信保护简介

文章目录 前言一、E2E基本概念二、为什么要做E2E?三、E2E保护的三种不同实现方式E2E TransformerE2E Protection Wrapper(E2EPW)COM E2E Callout四、E2E ProfileE2E Profile 01 机制E2E Profile 02 机制E2E Profile 04 机制E2E Profile 05 机制E2E Profile 06 机制E2E Profi…

《微信小程序实战(1)· 开篇示例 》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

深入理解SpringBoot(一)----SpringBoot的启动流程分析

1、SpringApplication 对象实例化 SpringApplication 文件 public static ConfigurableApplicationContext run(Object[] sources, String[] args) {// 传递的source其实就是类Bootstrapreturn new SpringApplication(sources).run(args);// 实例化一个SpringApplication对象执…

豆包MarsCode | 一款智能编程助手开发工具

豆包MarsCode | 一款智能编程助手开发工具 豆包MarsCode 是基于豆包大模型的智能开发工具&#xff0c;提供 Cloud IDE 和 AI 编程助手&#xff0c;支持代码补全、智能问答、代码解释与修复&#xff0c;兼容主流编程工具与 100 种编程语言&#xff0c;助力编程更智能便捷 豆包 M…

Cyber Weekly #24

赛博新闻 1、OpenAI发布最强模型o1 本周四&#xff08;9月12日&#xff09;&#xff0c;OpenAI宣布推出OpenAIo1系列模型&#xff0c;标志着AI推理能力的新高度。o1系列包括性能强大的o1以及经济高效的o1-mini&#xff0c;适用于不同复杂度的推理任务。新模型在科学、编码、数…

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器&#xff1a;embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件&#xff0c;取代物理硬件&#xff0c;为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…

【大模型专栏—进阶篇】智能对话全总结

大模型专栏介绍 &#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文为大模型专栏子篇&#xff0c;大模型专栏将持续更新&#xff0c;主要讲解大模型从入门到实战打怪升级。如有兴趣&#xff0c;欢迎您的阅读。 &#x1f4…

微信小程序开发第三课

1 wxml语法 1.1 模版语法 # 1 在页面 xx.js 的 Page() 方法的 data 对象中进行声明定义 # 2 在xx.wxml 中使用 {{}} 包裹&#xff0c;显示数据 # 3 可以显示如下&#xff0c;不能编写js语句或js方法-变量-算数运算-三元运算-逻辑判断# 4 只是单纯通过赋值&#xff0c;js中…

利用Hadoop Spark大数据技术构建国潮男装评论数据分析系统

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

Qt入门教程---项目创建全过程内存泄漏解释

目录 1.创建项目的说明 2.代码介绍说明 2.1文件分类介绍 2.2sources文件 2.3widget.ui文件 2.4widget.h文件 2.5中间文件 2.6.pro文件 3.打印输出hello world 3.1图形化界面生成控件 3.2代码生成控件 3.3打印结果展示 4.对于内存泄露的讨论 4.1对象树 4.2与栈开辟…

掌握这5大SEO优化策略,让你的网站流量飙升300%

想要让你的网站在搜索引擎中脱颖而出&#xff0c;吸引更多流量吗&#xff1f;那么&#xff0c;掌握SEO优化策略就成了关键。SEO&#xff0c;即搜索引擎优化&#xff0c;是通过一系列技术手段和策略&#xff0c;提高网站在搜索引擎中的排名&#xff0c;从而增加曝光率和访问量。…

【Elasticsearch系列四】ELK Stack

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

starUML使用说明文档[简单易懂/清晰明了]||好上手

1. 安装 StarUML 首先&#xff0c;您需要从 StarUML 官方网站&#xff08;http://staruml.io/&#xff09;下载最新版本的 StarUML 安装包。然后&#xff0c;按照提示进行安装。&#xff08;联想可以从软件管家里下载&#xff09; 2. 打开 StarUML 安装完成后&#xff0c;双击桌…

深圳前海港湾学校天桥下的免费停车点探寻

​最近开车去桂湾公园停车场的路上&#xff0c;看到有个天桥下有很多车停着&#xff0c;关键是这个地方离我搬砖的前海卓越写字楼还近&#xff0c;要是有时候桂湾公园停车位满了&#xff0c;停不进去的时候&#xff0c;是不是可以去这个天气下薅免费停车的羊毛&#xff1f;哈哈…

Pytorch+Anaconda+Pycharm+Python

0 python知识 0.1 os库常见用法 os 库提供了许多用于操作操作系统功能的函数。常见用法包括&#xff1a; 文件和目录操作&#xff1a; os.listdir(path)&#xff1a;列出指定路径下的所有文件和目录。os.mkdir(path)&#xff1a;创建新目录。os.remove(path)&#xff1a;删除…