一、MySQL为您提供了两种形式的CASE
表达式。
1、CASE
表达式的第一种形式:
CASE value WHEN compare_value_1 THEN result_1 WHEN compare_value_2 THEN result_2 WHEN compare_value_3 THEN result_3 WHEN compare_value_4 THEN result_4 WHEN compare_value_5 THEN result_5 WHEN compare_value_6 THEN result_6 ELSE result END
如果
value
等于compare_value
,例如compare_value_1
,compare_value_2
等,则CASE
表达式返回相应的结果,即result_1
,result_2
。 如果值不与任何compare_value
匹配,则CASE
表达式将返回ELSE
子句中指定的结果。2、
CASE
表达式的第二种形式如下:CASE WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 WHEN condition_3 THEN result_3 WHEN condition_4 THEN result_4 WHEN condition_5 THEN result_5 WHEN condition_6 THEN result_6 ELSE result END
在第二种形式中,如果条件为True
,则CASE
表达式返回结果,如result_1
,result_2
等。 如果所有条件都为false
,则返回ELSE
部分中的结果。如果省略ELSE
部分,CASE
表达式将返回NULL
。
3、CASE
表达式返回的数据类型取决于使用它的上下文的结果。 例如,如果在字符串上下文中使用CASE
表达式,则会以字符串形式返回结果。 如果在数值上下文中使用CASE
表达式,则会以整数,小数或实数值的形式返回结果。
1、例如:假设您要按状态对客户进行排序,如果状态为
NULL
,则要使用国家作为排序标准。要实现这一点,您可以使用第一种形式的CASE
表达式如下:SELECT customerName, state, country FROM customers ORDER BY (CASE WHEN state IS NULL THEN country ELSE state END);
2、例如: 如果您希望通过按状态查看销售订单数量,例如发货订单数量,待发货订单等,则可以使用CASE
表达式的第二种形式,如下所示:
SELECT SUM(CASE WHEN status = 'Shipped' THEN 1 ELSE 0 END) AS 'Shipped', SUM(CASE WHEN status = 'On Hold' THEN 1 ELSE 0 END) AS 'On Hold', SUM(CASE WHEN status = 'In Process' THEN 1 ELSE 0 END) AS 'In Process', SUM(CASE WHEN status = 'Resolved' THEN 1 ELSE 0 END) AS 'Resolved', SUM(CASE WHEN status = 'Cancelled' THEN 1 ELSE 0 END) AS 'Cancelled', SUM(CASE WHEN status = 'Disputed' THEN 1 ELSE 0 END) AS 'Disputed', COUNT(*) AS Total FROM orders;