180:连续出现得到数字
表:Logs
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| num | varchar |
+-------------+---------+
id 是这个表的主键。
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
返回的结果表中的数据可以按 任意顺序 排列。
查询结果格式如下面的例子所示:
示例 1:
输入:
Logs 表:
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
输出:
Result 表:
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+
解释:1 是唯一连续出现至少三次的数字。
解题思路:
解法一:
这种解法想法都不难,直接在Logs中去重复后拿到一个IdA1,然后从第二个Logs中拿到 A2 =A1 +1 的Id,从第三个Logs中拿到A3 = A2+1的Id,然后看这三个Id的Num是否相等即可。
SELECT DISTINCT
l1.Num AS ConsecutiveNums
FROM
Logs l1,
Logs l2,
Logs l3
WHERE
l1.Id = l2.Id - 1
AND l2.Id = l3.Id - 1
AND l1.Num = l2.Num
AND l2.Num = l3.Num
解法二:
这种解法其实是和上面那种一样的思路,只是这个用了连接查询,连接的条件依然是 l1.Id = l2.Id - 1 和l2.Id = l3.Id - 1 ,然后取出他们Num相等的数据。
select distinct(l1.Num) ConsecutiveNums
from Logs l1
join Logs l2
on l1.Id = l2.Id - 1
join Logs l3
on l2.Id = l3.Id - 1
where l1.Num = l2.Num and l2.Num = l3.Num;
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/consecutive-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。