LeetCode Database 180 连续出现的数字

1. 题目描述

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

1
2
3
4
5
6
7
8
9
10
11
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+

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

1
2
3
4
5
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+

2. 题解

如果题目要求离散出现至少3次,则用GROUP BY + HAVING,但是注意现在题目要求连续出现,

可以通过3表连接,描述连续出现3次的情况

1
2
3
4
-- 返回的Num必须用DISTINCT去重,因为连续出现3次以上,同一个数字就会返回多次
SELECT DISTINCT(t1.Num) AS ConsecutiveNums
FROM Logs t1, Logs t2, Logs t3 -- 3表自连接
WHERE t1.id + 1 = t2.id AND t2.id + 1 = t3.id AND t1.Num = t2.Num AND t2.Num = t3.Num -- 连续出现3个相同的数字

panchaoxin wechat
关注我的公众号
支持一下