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

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

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

题目正文

编写一个 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;


分享到:


相關文章: