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