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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,077评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,156评论 19 139
  • 夜深了 人静了 风住了 雨停了 哦,凄凄的夜 心平了 气和了 泪住了 你笑了 哦,痴痴的心
    那飘落的粉笔灰阅读 135评论 0 1
  • 天色,海色,星色。这样的蓝,有时浓厚无边,有时浅薄无层。这样的蓝,也似今生之念,也似前世之梦。鸟儿盘旋于蓝...
    冰夫阅读 75评论 0 0
  • 一个月前重装了电脑,装了个Python,版本已经是3.6.0。昨天装了个pyinstaller库打包Python应...
    flappyBug阅读 4,438评论 0 3