【Leetcode】高频SQL基础题--180.连续出现的数字

【Leetcode】高频SQL基础题--180.连续出现的数字

复制代码
要求:找出所有至少连续出现三次的数字。返回的结果表中的数据可以按 任意顺序 排列。

解题思路:

1、使用SQL窗口函数LAG和LEAD 来获取当前行的前一个和后一个num值,然后检查这三个值是否相同。如果相同,则表示当前行是连续三个相同数字的中间行。

2、最后,使用DISTINCT来去重,确保每个数字只输出一次。

重点:

1、子查询:使用LAG (num, 1) OVER (ORDER BY id)获取当前行的前一个num值,使用LEAD(num, 1) OVER (ORDER BY id)获取当前行的后一个num值。ORDER BY id确保按id顺序处理行。

不熟悉窗口函数,难!

代码:

sql 复制代码
SELECT 
    DISTINCT num AS ConsecutiveNums
FROM (
    SELECT
        id,
        num,
        LAG(num, 1) OVER (ORDER BY id) AS prev_num,
        LEAD(num, 1) OVER (ORDER BY id) AS next_num
    FROM Logs
) t
WHERE 
    num = prev_num AND num = next_num;
    

中间结果:

相关推荐
歪歪10015 小时前
如何在SQLite中实现事务处理?
java·开发语言·jvm·数据库·sql·sqlite
博睿谷IT99_17 小时前
SQL SELECT 语句怎么用?COMPANY 表查询案例(含条件 / 模糊 / 分页)
数据库·sql·mysql
2351617 小时前
【LeetCode】3. 无重复字符的最长子串
java·后端·算法·leetcode·职场和发展
没有bug.的程序员18 小时前
SQL 执行计划解析:从 EXPLAIN 到性能优化的完整指南
java·数据库·sql·性能优化·explain·执行计划
微笑尅乐18 小时前
神奇的位运算——力扣136.只出现一次的数字
java·算法·leetcode·职场和发展
小心草里有鬼18 小时前
Linux 数据库 Mysql8 主从复制
linux·运维·数据库·sql·mysql
自信的小螺丝钉18 小时前
Leetcode 155. 最小栈 辅助栈
leetcode·
吃着火锅x唱着歌18 小时前
LeetCode 3105.最长的严格递增或递减子数组
算法·leetcode·职场和发展
笨蛋少年派19 小时前
SQL查询基础常用攻略
sql
boy快快长大19 小时前
@Transactional 事务注解
数据库·sql·oracle