美文网首页
Leetcode刷SQL 3、连续出现的数字

Leetcode刷SQL 3、连续出现的数字

作者: Marstin | 来源:发表于2018-10-10 11:34 被阅读0次

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

    相关文章

      网友评论

          本文标题:Leetcode刷SQL 3、连续出现的数字

          本文链接:https://www.haomeiwen.com/subject/holpaftx.html