sql题一(空位连续座位买票)

sql题一

题目:
所需文件 ROWID(座位排号)、SEAT(座位编号)、STATUS(状态) 题目要求 4 个人一起去看电影,准备预订电影票横向坐一起,从这么多排座位中,找出连续 4个空位的全部组合,结果输出座位组合情况,例 (1~4 6~9) 思考一下如果是N个人的话应该如何解决,是否有一套通用的查询语句来完成题目。

使用您自己擅长的数据库即可,写sql时候,注明数据库及版本。
要求:写出sql,并写明解题思路

创建表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for 2003a
-- ----------------------------
DROP TABLE IF EXISTS `2003a`;
CREATE TABLE `2003a`  (
  `status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `seat` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `rowid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

插入数据
INSERT INTO `2003a` VALUES ('1', '未预订', 'A');
INSERT INTO `2003a` VALUES ('2', '已预订', 'A');
INSERT INTO `2003a` VALUES ('3', '未预订', 'A');
INSERT INTO `2003a` VALUES ('4', '未预订', 'A');
INSERT INTO `2003a` VALUES ('5', '未预订', 'A');
INSERT INTO `2003a` VALUES ('6', '已预订', 'B');
INSERT INTO `2003a` VALUES ('7', '未预订', 'B');
INSERT INTO `2003a` VALUES ('8', '未预订', 'B');
INSERT INTO `2003a` VALUES ('9', '未预订', 'B');
INSERT INTO `2003a` VALUES ('10', '未预订', 'B');
INSERT INTO `2003a` VALUES ('11', '未预订', 'C');
INSERT INTO `2003a` VALUES ('12', '已预订', 'C');
INSERT INTO `2003a` VALUES ('13', '已预订', 'C');
INSERT INTO `2003a` VALUES ('14', '未预订', 'C');
INSERT INTO `2003a` VALUES ('15', '未预订', 'C');
INSERT INTO `2003a` VALUES ('16', '未预订', 'D');
INSERT INTO `2003a` VALUES ('17', '未预订', 'D');
INSERT INTO `2003a` VALUES ('18', '未预订', 'D');
INSERT INTO `2003a` VALUES ('19', '未预订', 'D');
INSERT INTO `2003a` VALUES ('20', '已预订', 'D');
解答
-- mysql 8.0
select concat(seat-3,"~",seat) as '可选择座位'from(
select *,
(case STATUS 
when '未预订' then @num := @num+1
when '已预订' then @num := 0
end
 ) as 'num'
 from 2003a,(select @num := 0) as r1) as r2
 where r2.num>='4' and rowid =(select rowid from 2003a r3 where seat=r2.seat-3);
 -- 当人数是n个人时,只需要将两处seat-3改为(seat-(n-1))和num>'4'改为num>'n'即可
 -- 解题思路:将连续未预订进行标记,再从中找出满足条件的内容
解题思路

将连续未预订进行标记,再从中找出满足条件的内容

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值