当前位置: 首页> 科技> 能源 > MySQL CASE 表达式

MySQL CASE 表达式

时间:2025/7/14 21:17:58来源:https://blog.csdn.net/bt_xxx/article/details/139964423 浏览次数:0次

MySQL CASE表达式

  • 一、CASE表达式的语法
  • 二、 常用场景
    • 1,按属性分组统计
    • 2,多条件统计
    • 3,按条件UPDATE
    • 4, 在CASE表达式中使用聚合函数
  • 三、CASE表达式出现的位置

一、CASE表达式的语法

-- 简单CASE表达式
CASE sexWHEN 1 THEN '男'WHEN 2 THEN '女'ELSE '保密'
END-- 搜索CASE表达式
CASEWHEN sex=1 THEN '男'WHEN sex=2 THEN '女'ELSE '保密'
END 

注意事项:

  1. 各分支返回的数据类型必须一致;
  2. 结尾一定要写 END;
  3. 养成写 ELSE 子句的习惯(否则返回 NULL);

二、 常用场景

1,按属性分组统计

如:已有全国各市区人口数,统计各省总人口数

idcitypopulation
1南昌市656
2九江市454
3宜春市495
4合肥市800
5芜湖市373
6蚌埠市330
7长沙市1005
8株洲市390
9北京市2185
province总人口
江西省1605
安徽省1503
湖南1395
其它2185
SELECTCASE WHEN city IN('南昌市','九江市','宜春市') THEN '江西省'WHEN city IN('合肥市','芜湖市','蚌埠市') THEN '安徽省'WHEN city IN('长沙市','株洲市') THEN '湖南'ELSE '其它'END AS province, SUM(population) AS '总人口'
FROM `city_pop`
GROUP BY province 

2,多条件统计

如:按姓名和学科汇总成绩

idnameclassscore
1张三chinese98
2张三math87
3张三english91
4李四chinese100
5李四math98
6李四english79
name语文数学英语
张三988791
李四1009879
SELECT name,SUM(CASE WHEN class='chinese' THEN score ELSE 0 END) AS '语文',SUM(CASE WHEN class='math' THEN score ELSE 0 END) AS '数学',SUM(CASE WHEN class='english' THEN score ELSE 0 END) AS '英语'
FROM `class`
GROUP BY name

3,按条件UPDATE

如:工资20000以上员工降薪10%;工资10000以下员工加薪20%

idnamesalary
1张三25000
2李四9000
3王五12000
idnamesalary
1张三22500
2李四10800
3王五12000
UPDATE salary 
SET salary =CASE WHEN salary >= 20000 THEN  salary - salary*0.1 WHEN salary <= 10000 THEN  salary + salary*0.2 ELSE salary END

4, 在CASE表达式中使用聚合函数

如:每个人可以参加一个或多个俱乐部,当某人参加多个俱乐部时,需要用flag=1设置主俱乐部,默认flag=0

idnameclubflag
1张三篮球0
2张三羽毛球1
3李四足球0
4李四篮球1
5王五足球0
6刘六羽毛球0
namemain_club
张三羽毛球
李四篮球
王五足球
刘六羽毛球
// group by 为严格模式(sql_mod=ONLY_FULL_GROUP_BY)时,
// select查询的列,要么在group by中声明,要么通过聚合函数包装(此处用了max)
SELECT name, CASE WHEN COUNT(*) > 1 THEN  MAX(CASE WHEN flag = 1 THEN club ELSE NULL END)ELSE MAX(club) END AS main_club
FROM club
GROUP BY name

三、CASE表达式出现的位置

作为表达式,在执行时会被判断为一个固定值,因此不仅可以在SELECT子句中使用,还可以在WHERE子句、GROUP BY 子句、ORDER BY 子句中使用,它甚至可以写在聚合函数内部。
简单点来说,在能写列名和常量的地方,通常都可以写CASE表达式

关键字:MySQL CASE 表达式

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: