• 深入理解 MySQL 中的 CASE 语句:从基础到实战


    在数据库处理中,条件逻辑是不可或缺的部分,特别是在需要根据某些条件动态改变输出结果时。MySQL 的 CASE 语句提供了一种强大的方式来实现这种逻辑,让你可以在 SQL 查询中包含条件分支。本文将深入探讨 CASE 语句的使用方法,并通过实例加深理解。

    什么是 CASE 语句?

    CASE 语句相当于编程中的 if-elseswitch 语句。它根据条件表达式的值选择不同的执行路径。MySQL 中的 CASE 语句有两种形式:

    简单 CASE 语句

    CASE value_expression
        WHEN value1 THEN result1
        WHEN value2 THEN result2
        ...
        ELSE resultN
    END
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • value_expression 是要比较的表达式。
    • WHEN valueN THEN resultN 是基于 value_expression 的比较结果来选择的分支。
    • ELSE resultN 是所有 WHEN 条件都不满足时的默认结果。

    搜索 CASE 语句

    CASE
        WHEN condition1 THEN result1
        WHEN condition2 THEN result2
        ...
        ELSE resultN
    END
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • WHEN conditionN THEN resultN 直接基于条件表达式 conditionN 的真值来选择执行的分支。
    • ELSE resultN 是所有条件都不满足时的默认结果。

    CASE 语句的用途

    CASE 语句的用途非常广泛,比如:

    • 数据分类:根据某些条件对数据进行分类,返回不同的标签或值。
    • 动态排序:根据不同的条件对结果集进行排序。
    • 条件计算:进行复杂的计算,计算规则根据行中的数据动态变化。

    实际例子

    让我们通过几个例子来具体看看 CASE 语句的应用。

    示例 1:数据分类

    假设我们有一个销售数据表,我们想根据销售量对销售情况进行分类:

    SELECT
        ProductName,
        Sales,
        CASE
            WHEN Sales < 100 THEN 'Low'
            WHEN Sales BETWEEN 100 AND 500 THEN 'Medium'
            ELSE 'High'
        END AS SalesCategory
    FROM SalesData;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这个查询会返回每个产品的销售量,并根据销售量将其分类为 ‘Low’, ‘Medium’, 或 ‘High’。

    示例 2:动态排序

    如果我们想根据用户的选择对结果进行排序,CASE 语句也能派上用场:

    SELECT *
    FROM Products
    ORDER BY
        CASE WHEN UserPreference = 'Price' THEN Price
             WHEN UserPreference = 'Rating' THEN Rating
        END;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这个查询根据用户的偏好(价格或评级)来对产品进行排序。

    示例 3:条件计算

    回到您提出的具体问题,我们有一个 video_view 表,其中 view_count 列包含了一些以 “万” 结尾的字符串值。我们想要筛选出查看次数超过 10000 的记录:

    SELECT
        COUNT(*) AS count,
        product_type
    FROM
        video_view
    WHERE
        product_type != 0
        AND create_time BETWEEN '2024-01-27 11:02:10' AND '2024-03-27 11:02:10'
        AND (
            CASE
                WHEN view_count LIKE '%万%' THEN CAST(REPLACE(view_count, '万', '') AS DECIMAL(10, 2)) * 10000
                ELSE CAST(view_count AS DECIMAL(10, 2))
            END
        ) > 10000
    GROUP BY
        product_type
    ORDER BY
        count DESC;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    这个例子演示了如何使用 CASE 语句结合字符串函数和数学运算,将格式不统一

    的数据标准化处理,以进行有效的数据筛选。

    总结

    MySQL 中的 CASE 语句是一个强大的工具,能够让我们根据条件动态地控制 SQL 查询的行为。无论是进行数据分类、动态排序还是复杂的条件计算,CASE 语句都能派上用场,让我们的查询更加灵活和强大。希望通过这些例子,你能更好地理解和使用 CASE 语句,提升你的 SQL 技能。

  • 相关阅读:
    OpenCV计算形状之间的相似度ShapeContextDistanceExtractor类的使用
    iOS_OC API 指定可空性
    Geoserver中TileLayers中切割离线瓦片预览时地图模糊不清解决方法2
    BAT批处理命令启动Java打包的Jar没有指定启动类且第三方lib包在主jar外的项目
    Understanding Entity Relationship Behaviors in Microsoft Dynamics 365/CRM
    小程序授权头像昵称改为头像昵称填写能力详解
    栈回溯之使用帧指针分析
    SQL server创建数据库
    【字符串与日期的相互转换NSDate Objective-C语言】
    Linux系统编程系列之互斥锁和读写锁
  • 原文地址:https://blog.csdn.net/weixin_39973810/article/details/136683902