什么是CASE WHEN THEN ELSE END?
在SQL中,CASE WHEN THEN ELSE END是一种条件表达式,用于根据不同的条件执行不同的操作。它的基本结构如下:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END
在这个结构中,根据条件的成立与否,系统将选择执行相应的操作。如果所有条件都不成立,系统将执行ELSE后的默认操作。
基本用法示例
让我们通过一些简单的示例来理解CASE WHEN THEN ELSE END的基本用法。
-- 示例1:根据学生成绩判断等级 SELECT CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C' ELSE 'D' END AS grade FROM students;
在这个示例中,根据学生成绩的不同,使用CASE语句判断其等级并返回相应的结果。
-- 示例2:将性别代码翻译为文字描述 SELECT CASE gender_code WHEN 'M' THEN 'Male' WHEN 'F' THEN 'Female' ELSE 'Unknown' END AS gender FROM employees;
在这个示例中,通过CASE语句将性别代码翻译为可读的文字描述。
多条件判断与嵌套CASE语句
CASE语句支持多条件判断,也可以嵌套使用。以下是一些示例:
-- 示例3:根据订单状态和支付状态返回订单处理结果 SELECT CASE WHEN order_status = 'Canceled' THEN 'Order Canceled' WHEN order_status = 'Shipped' AND payment_status = 'Paid' THEN 'Order Shipped and Paid' WHEN order_status = 'Shipped' AND payment_status = 'Pending' THEN 'Order Shipped, Payment Pending' ELSE 'Unknown' END AS order_result FROM orders;
在这个示例中,通过多条件判断,根据订单的状态和支付状态返回相应的订单处理结果。
-- 示例4:嵌套CASE语句,判断学生成绩段 SELECT CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE CASE WHEN score >= 70 THEN 'C' ELSE 'D' END END AS grade FROM students;
在这个示例中,通过嵌套的CASE语句,判断学生成绩段并返回相应的等级。
使用CASE语句进行数据转换与处理
除了条件判断,CASE语句还常用于数据转换和处理。
-- 示例5:将日期字段转换为季度 SELECT CASE WHEN MONTH(order_date) BETWEEN 1 AND 3 THEN 'Q1' WHEN MONTH(order_date) BETWEEN 4 AND 6 THEN 'Q2' WHEN MONTH(order_date) BETWEEN 7 AND 9 THEN 'Q3' WHEN MONTH(order_date) BETWEEN 10 AND 12 THEN 'Q4' END AS order_quarter FROM orders;
在这个示例中,通过CASE语句将订单日期字段转换为相应的季度。
-- 示例6:对数据进行分类汇总 SELECT category, COUNT(*) AS total_count, SUM( CASE WHEN status = 'Completed' THEN 1 ELSE 0 END ) AS completed_count FROM products GROUP BY category;
在这个示例中,通过CASE语句对数据进行分类汇总,统计各个类别的总数和已完成的数量。
小结
通过本文的介绍,相信你对SQL中的CASE WHEN THEN ELSE END语句有了更深入的了解。它不仅在条件判断上发挥着巨大的作用,还能够在数据转换和处理中提供更灵活的操作手段。在实际应用中,善用CASE语句将使你的SQL查询更为高效和易读。