• 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;
  • 相关阅读:
    VC++6.0 自定义按钮,无标题对话框的拖动方法
    完整的使用线程池的多线程C/S Socket类
    树形控件Tree Control
    关闭数据执行保护
    VC++开发垃圾文件清理软件(下)
    用完成端口开发大响应规模的Winsock应用程序
    去掉右键多余显卡菜单
    自动登陆系统
    查询数据库中所有表名和表中所有字段名
    单行编辑框文本垂直居中(包含计算字体高度)
  • 原文地址:https://www.cnblogs.com/yuezc/p/12198110.html
Copyright © 2020-2023  润新知