MySQLCaseWhen多个条件详解

发布时间:2023-05-17

一、MySQL Case When 的基本语法

MySQL 中,CASE WHEN 语法是一种操作符,可以根据一个或多个条件执行不同的操作。 其基本语法为:

CASE 
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN conditionN THEN resultN
  ELSE result
END;

其中,CASE 是操作符的名称,condition1, condition2, conditionN 是条件,result1, result2, resultN 是对应条件的结果,ELSE result 是当所有条件都不成立时返回的结果。

二、MySQL Case When 多个条件的使用

MySQL Case When 语法可以同时处理多个条件,只需要在 WHEN 之后再添加一个条件即可。 例如,我们可以使用 MySQL Case When 多个条件来查询一个成绩区间的所有学生:

SELECT student_name, 
CASE 
  WHEN score <= 60 THEN '不及格'
  WHEN score > 60 and score <= 70 THEN '及格'
  WHEN score > 70 and score <= 80 THEN '中等'
  WHEN score > 80 and score <= 90 THEN '良好'
  ELSE '优秀'
END as '成绩等级'
FROM students;

以上语句会查询 students 表中每个学生的成绩,并将成绩按照条件进行分类,最后返回学生名称和成绩等级。

三、使用 MySQL Case When 进行关联选取

MySQL Case When 还可以用于多张表的关联选取,通过 CASE 语句可以实现在不同表中根据不同条件查询返回相应的结果。 例如,我们可以使用 MySQL Case When 在两个表中查询每个产品的总销售量和销售价格:

SELECT p.product_name, 
CASE 
  WHEN sum(o.quantity) < 50 THEN '低销量'
  WHEN sum(o.quantity) >= 50 and sum(o.quantity) < 100 THEN '中等销量'
  ELSE '高销量'
END as '销售量',
CASE 
  WHEN avg(o.price) < 10 THEN '低价产品'
  WHEN avg(o.price) >= 10 and avg(o.price) < 50 THEN '中等价产品'
  ELSE '高价产品'
END as '价格段'
FROM products p
JOIN orders o
ON p.product_id = o.product_id
GROUP BY p.product_name;

以上语句会查询出 products 表中每个产品的总销售量和平均销售价格,并将销售量和价格段按照条件分类,最后返回产品名称、销售量和价格段。

四、使用 MySQL Case When 进行数据转换

MySQL Case When 还可以用于数据转换,例如将数据类型从字符串转换为数字,或从数字转换为字符串。 例如,我们可以使用 MySQL Case When 将 gender 字段从字符串类型转换为数字类型:

SELECT student_name, 
CASE 
  WHEN gender = 'male' THEN 1
  ELSE 0
END as 'gender_num'
FROM students;

以上语句会查询出 students 表中每个学生的姓名和性别,并将性别转换为数字类型,male 为 1,female 为 0。

五、使用 MySQL Case When 进行数据筛选

MySQL Case When 还可以用于数据筛选,例如通过条件筛选出满足条件的数据。 例如,我们可以使用 MySQL Case When 查询出雇员工资大于 2000 的信息:

SELECT e.last_name, e.salary, 
CASE 
  WHEN salary > 2000 THEN '高薪'
  ELSE '低薪'
END as '薪资水平'
FROM employees e
WHERE salary > 2000;

以上语句会查询出 employees 表中工资大于 2000 的员工信息,并将工资按照条件分类,最后返回员工姓名、工资和薪资水平。