MySQL CASE表达式

Posted Yuezc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

以上是关于MySQL CASE表达式的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 的CASE WHEN 语句

mysql case 表达式

mysql--CASE WHEN 统计多个字段

在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?

mysql中case用法

mysql 中 case when then .... else end 的简单使用