1. 程式人生 > >Leetcode刷SQL 3、連續出現的數字

Leetcode刷SQL 3、連續出現的數字

編寫一個 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