MySQL case when的用法
在MySQL数据库中,CASE WHEN语句是一种非常强大的条件表达式,它允许我们根据不同的条件执行不同的操作或返回不同的结果。在本篇文章中,我们将详细介绍MySQL的CASE WHEN语句的用法,并通过一些示例代码来帮助读者更好地理解。
基本语法
CASE WHEN语句的基本语法如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE elseResult
END
其中,condition1,condition2,…,conditionN是用于判断的条件表达式,result1,result2,…,resultN是当对应条件满足时返回的结果,elseResult是当所有条件都不满足时返回的结果。
CASE WHEN语句的执行顺序是从上到下,当第一个满足条件的WHEN子句被找到时,对应的THEN子句的结果将被返回。如果没有满足条件的WHEN子句,将返回ELSE子句的结果。如果没有指定ELSE子句,将返回NULL。
示例代码
示例1:根据分数判断成绩等级
SELECT
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
WHEN score >= 60 THEN 'D'
ELSE 'F'
END AS grade
FROM
students;
以上代码将根据学生的分数判断其成绩等级,并将结果保存在名为grade的列中。根据不同的条件,将返回相应的等级,如果不满足任何条件,则返回F。
示例2:统计不同年龄段的人数
假设我们有一个employees表,其中包含员工的姓名和年龄。我们想要统计不同年龄段的人数,并以年龄段作为一列返回结果。
SELECT
CASE
WHEN age < 20 THEN '20以下'
WHEN age >= 20 AND age < 30 THEN '20-29'
WHEN age >= 30 AND age < 40 THEN '30-39'
WHEN age >= 40 THEN '40以上'
END AS age_group,
COUNT(*) AS count
FROM
employees
GROUP BY
age_group;
以上代码将根据员工的年龄划分不同的年龄段,并统计每个年龄段的人数。结果将以age_group为一列返回,并以年龄段进行分组。
示例3:计算订单总额和折扣后的总额
假设我们有一个orders表,其中包含订单的订单号、订单总额和折扣率。我们想要计算订单总额和折扣后的总额,并将结果保存在名为total_amount的列中。
SELECT
order_number,
order_amount,
CASE
WHEN discount_rate IS NULL THEN order_amount
ELSE order_amount * (1 - discount_rate)
END AS total_amount
FROM
orders;
以上代码将根据折扣率动态计算折扣后的总额。如果折扣率为空,则返回原始订单总额,否则根据折扣率计算折扣后的总额。
小结
CASE WHEN语句在MySQL数据库中是一种非常有用的条件表达式。我们可以根据不同的条件执行不同的操作或返回不同的结果。在本篇文章中,我们介绍了CASE WHEN语句的基本语法,并通过示例代码进行了解释和演示。