每天一道SQL题
每天一道SQL题之day05
1、题目:
链接: 连续出现的数字
表:Logs
Column Name | Type |
---|---|
id | int |
num | varchar |
在 SQL 中,id 是该表的主键。
id 是一个自增列。
找出所有至少连续出现三次的数字。
返回的结果表中的数据可以按 任意顺序 排列。
结果格式如下面的例子所示:
示例 1:
输入:
Logs
表:
id | num |
---|---|
1 | 1 |
2 | 1 |
3 | 1 |
4 | 2 |
5 | 1 |
6 | 2 |
7 | 2 |
输出:
Result
表:
ConsecutiveNums |
---|
1 |
2、题解
select distinct(l1.Num) ConsecutiveNums
from Logs l1, Logs l2, Logs l3
where l1.Id + 1 = l2.Id and l2.Id + 1 = l3.Id
and l1.Num = l2.Num and l2.Num = l3.Num
3、解析
- 连续出现:意味着相同数字的 Id 是连着的,由于这题问的是至少连续出现 3 次,我们使用
Logs
并检查是否有 3 个连续的相同数字。 - 同时需要添加关键字
DISTINCT
,因为如果一个数字连续出现超过 3 次,会返回重复元素。
最开始想的很简单:
select num as ConsecutiveNums from Logs having count(num) >= 3
测试的时候竟然过了,以为这题这么简单,没想到提交的时候就傻眼了,疯狂报错。