题目难度
中等
题目描述
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。
正确答案
SELECT DISTINCT Num AS ConsecutiveNums
FROM (SELECT Num,
CASE
WHEN @prev = Num THEN @count := @count+1
WHEN (@prev := Num) IS NOT NULL THEN @count := 1
END as CNT
FROM Logs, (SELECT @prev:=NULL,@count :=NULL) AS t
)AS tmp
WHERE tmp.CNT>=3;
分析
- CASE WHEN 结构新建了一列CNT,用于连续计数
- count变量用于记录连续出现的次数
- prev变量用于记录上一个数字
- 若当前数字与记录 prev相同,则累计计数,若不同,则重新计数
- 这里@prev,@count其实是两个空列,赋值判断时,是整列值赋为相同值。
- 形成临时表tmp,是数字与连续计数的记录。