当前位置:Gxlcms > 数据库问题 > MySQL CASE表达式

MySQL CASE表达式

时间:2021-07-01 10:21:17 帮助过:10人阅读

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;

 

MySQL CASE表达式

标签:weight   www   ref   查看   数据类型   html   com   状态   process   

人气教程排行