【发布时间】:2015-10-13 04:24:45
【问题描述】:
我正在练习 SQL 语言,遇到了一个类似的问题:
编写一个 SQL 查询来查找至少连续出现 3 次的所有数字。
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
例如,给定上面的 Logs 表,1 是唯一连续出现至少 3 次的数字。
我在网上找到了一个解决方案并进行了测试。但我真的不明白。大
解决方案的图片很清楚。 sq 表计算出现次数。但我不明白计算sq 的部分。我对MYSQL做了很多研究。 @counter := IF(@prev = Num, @counter + 1, 1) 表示如果 prev = Num,则使 counter = counter + 1,否则 counter = 1。(SELECT @counter:=1, @prev:=NULL) vars 表示创建一个表 vars,其中包括两列 counter 和 pre。
谁能帮我解释一下sq 部分的逻辑?或者SELECT中有这种表达方式的教程吗?我对 SQL 完全陌生,我知道这个问题可能很简单。谢谢你的帮助!
SELECT DISTINCT(Num) AS ConsecutiveNums
FROM (
SELECT
Num,
@counter := IF(@prev = Num, @counter + 1, 1) AS how_many_cnt_in_a_row,
@prev := Num
FROM Logs y, (SELECT @counter:=1, @prev:=NULL) vars
) sq
WHERE how_many_cnt_in_a_row >= 3
【问题讨论】: