zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    Java的类演进过程
    P112、面试题16:反转链表
    P107、面试题15:链表中倒数第K个结点
    Java对象相关元素的初始化过程
    P102、面试题14:调整数组顺序使奇数位于偶数前面
    P99、面试题13:在o(1)时间删除链表结点
    面试常考的数据结构Java实现
    Linux命令面试常考的简单汇总
    操作系统与进程基础知识
    python--process
  • 原文地址:https://www.cnblogs.com/yuezc/p/12198110.html
Copyright © 2011-2022 走看看