【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;
中间结果: