MySQL 的 case when 的语法有两种:
简单函数
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
搜索函数
CASE WHEN [expr] THEN [result1]…ELSE [default] END
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
#枚举这个字段所有可能的值*
CASE WHEN [expr] THEN [result1]…ELSE [default] END
#搜索函数可以写判断,并且搜索函数只会返回第一个符合条件的值,其他case被忽略
上例子
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
SQL如下:
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 temp
where temp.CNT>=3;
这里用到case when [expr]就是考虑到只返回第一个符合条件的值,如果不是重复值就会直接复制然后刷新@count,保证了@prev的变化也能返回@count,顺便说一下SQL里的:=
是赋值,先执行后面的,然后再赋值,=
是作为判断符号,两者在这里的不同的用处也很微妙.=
和set
,updata
结合使用也会有:=
的效果