查找所有至少连续出现三次的数字-Leetcode

1,464 阅读1分钟

周末不清闲的我,请了一天假来写毕业论文的开题报告,左改右改,删了又修,什么研究意义课题背景,对于我而已是那就是一件“如何把牛吹逼”的事情,好歹这逼吹得还好(呕心沥血)赢得了老师的认可,虽然我发现了一些小瑕疵,但老师还是给了我“内容充实、准确,态度认真”的认可。好吧,今天的内容还是关于sql查询语句,没错,还是那一道简单又不简单的sql。

题目

编写一个 SQL 查询,查找所有至少连续出现三次的数字。

数据库表

+----+-----+
| Id | Num |
+----+-----+
| 1  |  1  |
| 2  |  1  |
| 3  |  1  |
| 4  |  2  |
| 5  |  1  |
| 6  |  2  |
| 7  |  2  |
+----+-----+

例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+

知识点

用户自定义变量

局部变量

解法

自关联,自连接

select distinct l1.num ConsecutiveNums 
from Logs l1 join Logs l2 on l1.id=l2.id-1 join Logs l3 on l1.id=l3.id-2 
where l1.num=l2.num and l2.num=l3.num

利用用户变量

select distinct Num as ConsecutiveNums
from (
  select Num, 
    case 
      when @prev = Num then @count := @count + 1
      when (@prev := Num) is not null then @count := 1
    end as CNT
  from Logs, (select @prev := null,@count := null) as t
) as temp
where temp.CNT >= 3