MySQL中的CASE WHEN语句使用详解

在MySQL中,CASE WHEN语句是一种灵活的条件语句,它可以根据条件的满足情况返回不同的结果。在实际开发中,CASE WHEN语句通常用于数据分析、报表生成等场景,可以根据不同条件对数据进行分组、计算等操作。本文将详细介绍MySQL中CASE WHEN语句的用法和示例。
语法格式
CASE WHEN语句的基本语法格式如下所示:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
其中,condition1、condition2等为条件表达式,result1、result2为满足条件时的返回结果,default_result为默认返回结果。CASE WHEN语句按顺序逐个判断条件表达式,如果某个条件表达式满足,则返回对应的结果。如果所有条件都不满足,则返回默认结果。
示例
接下来通过几个示例来展示CASE WHEN语句的使用方式。
- 查询员工的薪资等级,根据薪资区间划分:
SELECT
emp_no,
salary,
CASE
WHEN salary < 3000 THEN '低薪'
WHEN salary >= 3000 AND salary < 6000 THEN '中薪'
ELSE '高薪'
END AS salary_level
FROM
employees;
执行以上SQL语句,可以根据员工的薪资水平将其划分为低薪、中薪和高薪三个等级,并返回对应的结果。
- 统计各部门男女员工的人数:
SELECT
dept_no,
COUNT(*) AS total_count,
SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,
SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count
FROM
employees
GROUP BY
dept_no;
在上述示例中,通过CASE WHEN语句统计了各个部门男女员工的人数,并返回对应的结果。
- 统计各个年龄段的员工数量:
SELECT
CASE
WHEN age < 30 THEN '30岁以下'
WHEN age >= 30 AND age < 40 THEN '30-39岁'
WHEN age >= 40 AND age < 50 THEN '40-49岁'
ELSE '50岁以上'
END AS age_group,
COUNT(*) AS total_count
FROM
employees
GROUP BY
age_group;
执行以上SQL语句,可以根据员工的年龄将其划分为不同的年龄段,并统计各个年龄段的员工数量。
- 计算各部门员工的平均薪资:
SELECT
dept_no,
AVG(CASE WHEN gender = 'M' THEN salary ELSE NULL END) AS male_avg_salary,
AVG(CASE WHEN gender = 'F' THEN salary ELSE NULL END) AS female_avg_salary
FROM
employees
GROUP BY
dept_no;
在上述示例中,通过CASE WHEN语句计算了各个部门男女员工的平均薪资,并返回对应的结果。
小结
通过上述示例,我们可以看到CASE WHEN语句在MySQL中的强大功能。它可以灵活地根据条件返回不同的结果,适用于各种数据分析和报表生成的场景。在实际开发中,我们可以结合CASE WHEN语句与其他SQL语句一起使用,实现更多复杂的数据处理需求。
极客笔记