MySQL CASE WHEN 用法

简介
在MySQL中,CASE WHEN是一种条件语句,用于根据不同的条件执行不同的操作。它类似于其他编程语言中的switch语句,可以对多个不同的条件进行判断和处理。
CASE WHEN语句由以下几个部分组成:
CASE:开始CASE WHEN语句块。WHEN:跟随在CASE后面,用于判断条件。THEN:跟随在WHEN后面,用于执行条件为真时要执行的操作。ELSE:可选部分,在所有条件都不满足时执行的操作。END:结束CASE WHEN语句块。
CASE WHEN语句主要用于查询,可以在SELECT、UPDATE、DELETE语句等中使用。
语法示例
下面是CASE WHEN语句的基本语法示例:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN condition3 THEN result3
...
ELSE result
END
使用场景
CASE WHEN语句通常在需要根据不同条件返回不同结果的查询中使用。以下是几个常见的使用场景:
条件判断和返回值
假设我们有一张名为students的表,其中包含学生的姓名和成绩。我们希望根据学生的成绩,将其分为不同的等级:
- 成绩大于等于90分为优秀
- 成绩大于等于80分为良好
- 成绩大于等于70分为中等
- 其他情况为不及格
可以使用CASE WHEN语句来实现这个需求:
SELECT
name,
score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 70 THEN '中等'
ELSE '不及格'
END AS level
FROM
students;
运行以上查询语句,将返回一个包含学生姓名、成绩和等级的结果集。
根据不同条件进行计算
CASE WHEN语句还可以用于在查询中根据不同的条件进行计算或操作。例如,我们有一张名为orders的表,存储了订单的总额和折扣信息,现在需要计算每个订单的实际支付金额。如果订单总额大于1000,应用10%的折扣;如果订单总额大于500但小于等于1000,应用5%的折扣;否则不打折。
可以使用CASE WHEN语句来计算实际支付金额:
SELECT
order_id,
total_amount,
CASE
WHEN total_amount > 1000 THEN total_amount * 0.9
WHEN total_amount > 500 THEN total_amount * 0.95
ELSE total_amount
END AS actual_amount
FROM
orders;
运行以上查询语句,将返回一个包含订单号、总额和实际支付金额的结果集。
注意事项
在使用CASE WHEN语句时,需要注意以下几点:
多个条件的顺序
CASE WHEN语句将按照条件的先后顺序执行,当满足某个条件时,立即执行对应的结果,并跳出整个CASE WHEN语句块。因此,如果有多个条件可以满足,只会执行第一个满足条件的操作。
比较操作符
在WHEN中可以使用各种比较操作符,如=、>、<等。还可以使用BETWEEN、IN等来判断条件。
结果类型
CASE WHEN语句中的每个结果表达式的数据类型必须一致,否则会出现类型不匹配的错误。
嵌套使用
CASE WHEN语句可以嵌套使用,即在WHEN或ELSE部分使用另一个CASE WHEN语句。嵌套CASE WHEN语句的条件和结果可以是其他CASE WHEN语句。
CASE
WHEN condition1 THEN
CASE
WHEN condition2 THEN result2
ELSE result3
END
ELSE result1
END
总结
CASE WHEN是MySQL中用于条件判断和根据不同条件执行不同操作的语句。它可以在查询中根据条件返回不同结果,或根据条件进行计算和操作。CASE WHEN语句的灵活性使其在数据库操作中具有广泛的应用场景。在使用时,需要注意条件的顺序、比较操作符的使用、结果类型的一致性以及嵌套使用的可能性。
极客笔记