题目
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+
解题思路
提示:用 DISTINCT 和 WHERE 语句
1.连续出现意味着相同数字的id是连续的,这题问的是至少连续3次出现,我们使用Logs并检查是否有连续3个的相同数字;
SELECT *
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
查询结果如下:
+----+-----+-----+------+-----+------+
| Id | Num |Id(1)|Num(1)|Id(2)|Num(2)|
+----+-----+------+-----+-----+------+
| 1 | 1 | 2 | 1 | 3 | 1 |
+----+-----+------+-----+-----+------+
注意:前两列来自 l1 ,接下来两列来自 l2 ,最后两列来自 l3 。
然后我们从上表中选择任意的 Num 获得想要的答案。同时我们需要添加关键字 DISTINCT ,因为如果一个数字连续出现超过 3 次,会返回重复元素。
MySQL
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
最终结果
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+
END
以上就是今天的SQL应用题,查询连续出现的数字,有不对指出,望指正