赞
踩
在数据库处理中,条件逻辑是不可或缺的部分,特别是在需要根据某些条件动态改变输出结果时。MySQL 的 CASE 语句提供了一种强大的方式来实现这种逻辑,让你可以在 SQL 查询中包含条件分支。本文将深入探讨 CASE 语句的使用方法,并通过实例加深理解。
CASE 语句相当于编程中的 if-else
或 switch
语句。它根据条件表达式的值选择不同的执行路径。MySQL 中的 CASE 语句有两种形式:
CASE value_expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE resultN
END
value_expression
是要比较的表达式。WHEN valueN THEN resultN
是基于 value_expression
的比较结果来选择的分支。ELSE resultN
是所有 WHEN
条件都不满足时的默认结果。CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END
WHEN conditionN THEN resultN
直接基于条件表达式 conditionN
的真值来选择执行的分支。ELSE resultN
是所有条件都不满足时的默认结果。CASE 语句的用途非常广泛,比如:
让我们通过几个例子来具体看看 CASE 语句的应用。
假设我们有一个销售数据表,我们想根据销售量对销售情况进行分类:
SELECT
ProductName,
Sales,
CASE
WHEN Sales < 100 THEN 'Low'
WHEN Sales BETWEEN 100 AND 500 THEN 'Medium'
ELSE 'High'
END AS SalesCategory
FROM SalesData;
这个查询会返回每个产品的销售量,并根据销售量将其分类为 ‘Low’, ‘Medium’, 或 ‘High’。
如果我们想根据用户的选择对结果进行排序,CASE 语句也能派上用场:
SELECT *
FROM Products
ORDER BY
CASE WHEN UserPreference = 'Price' THEN Price
WHEN UserPreference = 'Rating' THEN Rating
END;
这个查询根据用户的偏好(价格或评级)来对产品进行排序。
回到您提出的具体问题,我们有一个 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;
这个例子演示了如何使用 CASE 语句结合字符串函数和数学运算,将格式不统一
的数据标准化处理,以进行有效的数据筛选。
MySQL 中的 CASE 语句是一个强大的工具,能够让我们根据条件动态地控制 SQL 查询的行为。无论是进行数据分类、动态排序还是复杂的条件计算,CASE 语句都能派上用场,让我们的查询更加灵活和强大。希望通过这些例子,你能更好地理解和使用 CASE 语句,提升你的 SQL 技能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。