【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;
    

中间结果:

相关推荐
冰暮流星13 分钟前
sql之计算
数据库·sql
All for pursuit.2 小时前
【并查集-2】399.除法求值
数据结构·c++·算法·leetcode
Nil2083 小时前
leetcode 416分割等和子集
算法·leetcode·职场和发展
y1su6 小时前
Leetcode 二分模板
java·数据结构·算法·leetcode·排序算法
Pniubi7 小时前
力扣55跳跃游戏(贪心)
算法·leetcode·游戏
imDwAaY8 小时前
一条 SQL 发出去之后,MySQL 到底做了什么?
sql·mysql
CoderYanger9 小时前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
All for pursuit.9 小时前
【动态规划-8】152.乘积最大子数组
数据结构·c++·算法·leetcode·动态规划
Nil20810 小时前
leetcode 152乘积最大子数组
leetcode
刘胡子大叔20 小时前
SQL 脚本的导入顺序
数据库·sql