mysql case 不做处理_MySQL,case when你真的会用吗?避坑指南

case when 的语法有如下3种:1CASE WHEN [expr] THEN [result1]…ELSE [default] END 2CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END 3CASE [col_name] WHEN [expr1] THEN [result1]…ELSE [default] END

case when 的语法有如下3种:

336c2d805ec69717aaf769e35f64d4aa.png

1.第一种语法最常用,可比较等于、范围的条件。遇到第一个满足条件的即返回,不再往下比较,如果没有满足的条件则返回else里的结果,如果没有else则返回NULL。

2.第二种语法不常用,只能比较等于的条件。when后面如果是值,则是表示等于的意思,"="可以不用写,遇到满足条件的才返回,如果没有满足的条件则返回else里的结果,如果没有else则返回NULL。

3.第三种语法实际上是错的。when后面如果是表达式,不管when的条件是否满足,都是返回else里的结果,如果没有else则返回NULL。

4.when后面要么是表达式,要么是值,不然报错。如果是“=‘101’“或者“>=1000” 这样既不是表达式,也不是值,则执行时报错。

表结构:

21461864a943f258b998b6d5acc7e61e.png

现有记录:

819eb093f0de173bc84c8aa69e07c13b.png

我们想根据salary区分类别:

1. 使用语法1

CASE WHEN [expr] THEN [result1]…ELSE [default] END

如下语句的结果符合期望,when后面是表达式:

5ba7890d862ef65e3226d2048507cbc4.png

如下语句的结果则不符合期望,顺序弄反了,是返回第一个符合条件的结果:

271af3aaa6eed9936eb3135c2a66fdb8.png

2. 使用语法2

CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END

如下语句的结果符合期望,when后面是值:

b45160db38672257cc396b764d61acfa.png

如下语句则报错,when后面既不是表达式,也不是值:

9c9eb486d2db8b45d2a218c5987a05bf.png

3. 使用语法3

CASE [col_name] WHEN [expr1] THEN [result1]…ELSE [default] END

如下语句不报错,但是结果不符合期望,when后面是表达式,不管when的条件是否满足,都是返回else里的结果;如果把else语句注释掉了,都是返回NULL:

921f68a799c72d71f19de68623e55a7a.png

a68738359b11ba1c5ca9c55fe4dae841.png

以上是本人亲测,之前使用时有些迷惑第二种语法,如今终于明白了。下期分享case when在分组统计中的实际用法。

fa6bb2149531f20460d244fb8791b659.png

「欢迎关注,每天更新职场实用技能」

0f8275d3879c8b3d381938f9ceaab6d9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值