「你所不知道的Mysql」第五篇 连续出现的数字

一直忙着写leetcode的算法题,很久没有写sql的文章了,今天更新一下。

题目正文

编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ 例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。 +-----------------+ | ConsecutiveNums | +-----------------+ | 1 | +-----------------+

思路分析

理解题目意思,连续出现三次则记录。运用mysql的变量能力,其实很简单。

解法

SELECT DISTINCT T1.Num ConsecutiveNums FROM ( SELECT Num, (@Row :=@Row + (@Prev <> @Prev:= Num)) Rank FROM Logs, (SELECT @Row:=0, @Prev:=-1) AS Temp GROUP BY Rank HAVING COUNT(Rank) >=3) T1;