MYSQL之CASE WHEN的简单理解和使用

mysql中的case when有两种写法:

  1. 简单函数
    CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
  2. 搜索函数 
    CASE WHEN [expr] THEN [result1]…ELSE [default] END

简单函数

针对一个字段来进行枚举,把可能的值的定义结果来重新放到一列,下面user_group表

idname
1张三
2李四
3王五
4朱六
select `name`, CASE name
	WHEN '张三' THEN
		'第一组'
	WHEN '李四' THEN
		'第二组'
	ELSE
		'第三组'
END 'group' FROM user_group;

得到的结果如下表

namegroup
张三第一组
李四第二组
王五第三组
朱六第三组

搜索函数

case语句允许在when下根据判断语句,在结果内对值进行替换,下面user_age表

idnameage
1名字13
2名字216
3名字321
4名字429
5名字531
6名字656
7名字763
select `name`,age,CASE 
	WHEN age<18 THEN
		'少年'
	WHEN age>=18 and age<30 THEN
		'青年'
	WHEN age>=30 and age<50 THEN
		'中年'
	ELSE
		'老年'
END stage from user_age;

结果:

nameagestage
名字13少年
名字216少年
名字321青年
名字429青年
名字531中年
名字656老年
名字763老年

除了进行基础的判断用法外,他还可以用作行转列操作。按照上面得到的结果来插入到一个user_stage表中,现在有个需求,把stage中的每个阶段当做一个单独的字段来进行统计每个阶段的人数。

select 
SUM(CASE stage
	WHEN '少年' THEN
		1
	ELSE
		0
END) '少年',
SUM(CASE stage
	WHEN '青年' THEN
		1
	ELSE
		0
END) '青年',
SUM(CASE stage
	WHEN '中年' THEN
		1
	ELSE
		0
END) '中年',
SUM(CASE stage
	WHEN '老年' THEN
		1
	ELSE
		0
END) '老年'
from user_stage

其实这个方法并不好,有更简单的方法实现,但是在这里只做演示,结果:

少年青年中年老年
2212

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值