Leetcode刷SQL 3、連續出現的數字
阿新 • • 發佈:2018-12-14
編寫一個 SQL 查詢,查詢所有至少連續出現三次的數字。
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
例如,給定上面的 Logs 表, 1 是唯一連續出現至少三次的數字。
+-----------------+ | ConsecutiveNums | +-----------------+ | 1 | +-----------------+
這一題存在比較麻煩的兩點: 1、判斷該數字連續出現次數大於三次。 2、記錄連續出現次數大於三次的數字。
整理下大概思路: 首先統計每個數字出現次數,默認出現次數為1,遇到相同則+1,遇到不同則重置,做一輪查詢,這樣就能查出所有數字的連續出現最大值,然後再做一次查詢即可
SELECT DISTINCT al.Num AS ConsecutiveNums FROM (SELECT @count := @count + ( CASE WHEN @num = e.Num THEN 0 ELSE 1 END ) AS c, e.Num, @num := e.Num FROM LOGS e, (SELECT @count := 0) a, (SELECT @num := - 1) b) al GROUP BY al.c, al.num HAVING COUNT(*) >= 3