「你所不知道的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;


分享到:


相關文章: