在日常的 SQL 查询中,条件判断是不可避免的。MySQL 提供了强大的
CASE
表达式,用于在查询中执行条件逻辑。本文将探讨两种常见的CASE
语法:CASE WHEN
和CASE xxx WHEN
。
一、CASE WHEN
的灵活使用
CASE WHEN
是 MySQL 中最常用的条件表达式。它允许你根据多个布尔条件返回不同的结果。这种灵活性使得 CASE WHEN
成为处理复杂业务逻辑的利器。
语法结构:
SELECT
column1,
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE resultN
END AS alias_name
FROM
table_name;
示例:根据成绩划分等级
假设有一个学生成绩表 students_scores
,你可以根据成绩为学生划分等级:
SELECT
student_id,
score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END AS grade
FROM
students_scores;
应用场景:
- 数据分组:根据不同条件对数据进行分类处理。
- 字段计算:在查询中创建计算字段,避免复杂视图的使用。
- 排序与过滤:在
ORDER BY
和HAVING
子句中,依据条件排序和过滤数据。
二、CASE xxx WHEN
的简单优雅
CASE xxx WHEN
是 CASE
表达式的另一种形式,适用于对单个表达式的不同值进行判断。这种形式更为简洁,适合处理针对特定字段的多值比较。
语法结构:
SELECT
column1,
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE resultN
END AS alias_name
FROM
table_name;
示例:根据产品类别应用折扣
假设有一个产品表 products
,你可以根据产品类别为其应用不同的折扣:
SELECT
product_id,
category,
price,
CASE category
WHEN 'Electronics' THEN price * 0.9
WHEN 'Clothing' THEN price * 0.8
ELSE price
END AS discounted_price
FROM
products;
应用场景:
- 条件分支简化:适用于针对某一字段的多值判断,避免使用冗长的
IF
或OR
逻辑。 - 提高可读性:对于明确的值匹配,
CASE xxx WHEN
使 SQL 查询更加简洁直观。
三、总结
CASE WHEN
和 CASE xxx WHEN
都是处理条件逻辑的强大工具。前者灵活多变,适用于复杂的布尔判断;后者简单优雅,适合对单个字段的多值比较。理解并掌握这两种语法,可以帮助你在编写 MySQL 查询时更加得心应手。