2020-04-09

连续出现N次

Create table If Not Exists Logs (Id int, Num int)
Truncate table Logs
insert into Logs (Id, Num) values ('1', '1')
insert into Logs (Id, Num) values ('2', '1')
insert into Logs (Id, Num) values ('3', '1')
insert into Logs (Id, Num) values ('4', '2')
insert into Logs (Id, Num) values ('5', '1')
insert into Logs (Id, Num) values ('6', '2')
insert into Logs (Id, Num) values ('7', '2')

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

SELECT DISTINCT a.Num ConsecutiveNums FROM 
        (SELECT t.Num ,#t表的Num
       @cnt:=IF(@pre=t.Num, @cnt+1, 1) cnt,
       @pre:=t.Num pre#如果pre与t.num 相等,则cnt加1, 否则cnt重置为1
        FROM Logs t,
                 (SELECT @pre:=null, @cnt:=0) b) a#将生成的num与cnt次数的表,作为新的表 a
  WHERE a.cnt >= 3 

#声明cnt变量--次数统计,pre变量--上次Num的值

Point

用户变量
用户变量,在客户端链接到数据库实例整个过程中用户变量都是有效的

MySQL中用户变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。

select @num:=1; 或 select @num:=字段名 from 表名 where ……,

三元表达式

if(条件,语句一,语句二)

Sql判断查询,类似三元表达式。参数一为条件,条件结果为true执行参数二语句,条件结果为false执行参数三语句。

你可能感兴趣的:(2020-04-09)