mysql中关于case-when的三种使用场景
在数据库中,case when常用来做条件判断,在一些场景下十分方便。
开始之前
数据准备:参加某一次竞赛时的学生成绩,sex代表性别(1为男0为女),subject代表学科,score代表分数。张三属于一班,王红属于二班,周浩属于三班

第一种:已知数据按照另外一种方式进行分组,聚合
设想这样一个场景:我想知道每个班总分是多少;代码在下面给出
SELECT SUM(score),
(case name
when '张三' THEN '一班'
when '王红' THEN '二班'
ELSE '三班'
END) class
from student_score
GROUP BY
case name
when '张三' THEN '一班'
when '王红' THEN '二班'
ELSE '三班'
END;
结果:

上面sql的意思就是:将张三认为是一班的人,王红认为是二班的人,其他的(剩余周浩)认为是三班的人,然后按照这个分法分组求和,得到了想要的结果。
第二种:用一个SQL语句完成不同条件的分组。
设想这样一个场景:我想知道每个学科男生女生分别得到多少分;代码在下面给出
SELECT `subject`,
SUM(CASE WHEN sex = 1 THEN score ELSE 0 END) male,
SUM(CASE WHEN sex = 0 THEN score ELSE 0 END) female
FROM student_score
GROUP BY `subject`;
结果:

上面sql的意思就是:按照学科分组聚合时,male一列表示sex为1则score保持不变,sex为0时则score为0;
female一列与male一列代表的意义相反,sex为0则score保持不变,sex为1时则score为0.
第三种:根据条件有选择的UPDATE
设想这样一个场景:我想对每一项分数,依据是大于80的分数减10,小于70的分数加5,其他的部分不变;代码在下面给出
UPDATE student_score set
score = (
CASE WHEN score > 80 then score - 10
WHEN score <70 THEN score + 5
ELSE score
END);
上面sql的意思就是:按照条件来判断每一条数据,然后更新.
本文详细介绍MySQL中CASE WHEN语句的三种实用场景,包括数据按特定方式分组聚合、不同条件下的分组统计及有选择地更新数据,帮助读者掌握高效的数据处理技巧。
954

被折叠的 条评论
为什么被折叠?



