计算机小白QAQ,因为想找数分岗暑期实习所以充了会员想集中刷一下leetcode的mysql部分。写这个系列博文和大家们交流一下,后面也会持续更新面经准备的一些问题,欢迎同好们一起交流,求大佬轻喷QAQ。因为自己初学也走了很多弯路,所以会尽量写得详细一点,如果可以帮助到后来的朋友们,请各位留言鼓励一下哈哈哈哈。
603.连续空余的座位
提供两种思路供大家参考,其实这个题蛮有意思的,我觉得不应该放在简单题应该放在中等题hhh
思路1:首先将各座位按照seat_id排序,利用滑动窗口函数求和,窗口大小为2,如果和为2则证明连续的两个座位都是空余的返回后一个座位号,但是最开始头那个座位就缺失掉了,所以我们用的办法是利用union函数,先返回所有后一个座位号再返回所有前一个座位号,将两者利用union函数拼接起来就得到合适的结果了。
知识点1:union去重拼接,union all不去重
知识点2:开窗函数over,一般格式:over(order by 列名 partition by 列名)orderby是按照什么什么排序,partition by是按照该列分组,over表示的开窗范围:range between 5 preceding and 5 following表示为当前行数据幅度减5加5后的范围内的,本题代码中用到的就是rows 1 PRECEDING表示当前行数据向前加一行。但是开窗函数不能单独使用,本题中利用sum()达到向前累计加和的功