在数据库处理中,条件逻辑是不可或缺的部分,特别是在需要根据某些条件动态改变输出结果时。MySQL 的 CASE 语句提供了一种强大的方式来实现这种逻辑,让你可以在 SQL 查询中包含条件分支。
什么是 CASE 语句?
CASE 语句相当于编程中的 if-else
或 switch
语句。它根据条件表达式的值选择不同的执行路径。MySQL 中的 CASE 语句有两种形式:
- 简单CASE函数
- 搜索CASE函数
简单 CASE 语句
CASE value_expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE resultN
END
value_expression
是要比较的表达式。WHEN valueN THEN resultN
是基于value_expression
的比较结果来选择的分支。ELSE resultN
是所有WHEN
条件都不满足时的默认结果。
搜索 CASE 语句
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END
WHEN conditionN THEN resultN
直接基于条件表达式conditionN
的真值来选择执行的分支。ELSE resultN
是所有条件都不满足时的默认结果。
CASE 语句的用途
CASE 语句的用途非常广泛,比如:
- 数据分类:根据某些条件对数据进行分类,返回不同的标签或值。
- 动态排序:根据不同的条件对结果集进行排序。
- 条件计算:进行复杂的计算,计算规则根据行中的数据动态变化。
假设这是一个手机销量表,表中会有各种品牌的销量情况;
业务需求:
假设有一个后台数据平台,查看手机品牌的销量情况,并以环形图的形式展示。那么就需要将品牌划分为:苹果、华为、VIVO、OPPO、小米、其它。
思路:
如果不使用CASE语句,那么就需要先将其它的那些品牌筛选出来然后进行求和,然后再查询出原表中需要展示的这几个品牌,最后将这两个查询结合返回。此种方式SQL语句就不做示例了。
如果使用CASE语句,那么语句就如下:
select sum(xl),
case
when brand not in('苹果','华为','vivo','oppo','小米') then '其他'
else brand
end as brandName
from newtable
group by brandName
运行结果:
最后先暂时不进行group by 分组 来更加直白的体现case语句的作用,也就是暂时将上述的SQL语句group by字段删掉
select xl,
case
when brand not in('苹果','华为','vivo','oppo','小米') then '其他'
else brand
end as brandName
from newtable
运行结果:
到此,case语句的效果相比大家应该能够明白了,这种需求在实际中可能会有许多类似的情况,如果会使用case语句,那么就可以使我们的SQL语句变得非常简便与简洁。