LeetCode刷题-数据库(MySQL)-180. 连续出现的数字

180. 连续出现的数字

一、题目描述

编写一个 SQL 查询,查找所有至少连续出现三次的数字。

Id Num
1 1
2 1
3 1
4 2
5 1
6 2
7 2

例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

ConsecutiveNums
1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/consecutive-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析

类似这种连续出现几次的问题,一般来说都是通过表错序自连来解决。即:
LeetCode刷题-数据库(MySQL)-180. 连续出现的数字_第1张图片
如上图所示,将表Logs自连三次,并令:
L1.Id = (L2.Id + 1) 且 (L2.Id = L3.Id + 1)

这样做的结果就是让连续三个Id对应的Num放在了一行,方便比较。当 L1.Num = L2.Num = L3.Num 时,就表示该 Num 至少连续出现了三次。

三、代码实现

SELECT DISTINCT
	l1.Num AS ConsecutiveNums
FROM
	Logs l1,
	Logs l2,
	Logs l3
WHERE
	l1.Id = l2.Id + 1
	AND l2.Id = l3.Id + 1
	AND l1.Num = l2.Num
	AND l2.Num = l3.Num;

你可能感兴趣的:(MySQL)