一直忙著寫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;