MySQL CASE表达式

一、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_1compare_value_2等,则 CASE表达式返回相应的结果,即 result_1result_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_1result_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;

猜你喜欢

转载自www.cnblogs.com/yuezc/p/12198110.html