什么是Case When语句
Case When语句是MySQL中的一种条件语句,它允许你基于条件来返回不同的结果。在你的SQL查询中,当需要根据不同的条件来返回不同的结果时,你可以使用Case When语句。
语法格式:
SELECT
col1,
col2,
case
when [condition1] then [result1]
when [condition2] then [result2]
...
when [conditionN] then [resultN]
else [result]
end as [alias]
FROM
table_name;
在这个语法中,col1、col2代表SELECT子句中的列,condition表示条件,result表示当条件满足时返回的结果,alias是输出结果的别名。Case When语句可以有多个when条件,并且至少必须包含一个else选项,用于处理所有其他情况。
Case When语句的使用场景
Case When语句是查询中非常常用的函数,可以用来实现各种不同的情况,例如:
统计数据
你可以使用Case When语句在统计数据时进行条件汇总。例如,你想知道你的公司有多少名员工是全职的,有多少是兼职的。你可以使用下面的查询来实现这个功能。
SELECT
COUNT(*) AS total,
SUM(CASE WHEN job_type = 'fulltime' THEN 1 ELSE 0 END) AS fulltime_count,
SUM(CASE WHEN job_type = 'parttime' THEN 1 ELSE 0 END) AS parttime_count
FROM
employee;
在上面的查询中,我们使用了Case When语句来统计全职(job_type = ‘fulltime’)和兼职(job_type = ‘parttime’)的员工数量。更具体地说,我们在SUM函数内使用了Case When语句,当条件满足时将1加入总计中,否则加入0。
数据清洗
Case When语句也可以用于数据清洗中。例如,你有一个表tb_order包含order_id、order_time、order_status和order_amount四个字段,需要将数据按照某种规则重新编排。
SELECT
order_id,
order_time,
order_status,
order_amount,
CASE
WHEN order_status = 'new' THEN '新订单'
WHEN order_status = 'processing' AND order_amount > 1000 THEN '高风险订单'
WHEN order_status = 'processing' AND order_amount < 1000 THEN '低风险订单'
WHEN order_status = 'cancelled' THEN '已取消订单'
WHEN order_status = 'delivered' THEN '已送货订单'
END AS order_type
FROM
tb_order;
在上面的查询中,我们使用了Case When语句来根据不同的订单状态和订单金额对订单进行分类。在结果集中,我们新增了一个列order_type,用于指示订单的类型。
数据分析
Case When语句也可以用于数据分析,例如,你想知道今年你销售的产品数量比去年增加了多少。
SELECT
SUM(CASE WHEN YEAR = 'this year' THEN quantity ELSE 0 END) AS this_year_sales,
SUM(CASE WHEN YEAR = 'last year' THEN quantity ELSE 0 END) AS last_year_sales,
SUM(CASE WHEN YEAR = 'this year' THEN quantity ELSE -quantity END) AS difference
FROM sales
WHERE YEAR IN ('this year', 'last year');
这条SQL语句使用了三个CASE WHEN语句,分别对今年、去年的销售数量进行汇总,并计算了两年之间的差异。其中,第一个CASE WHEN语句会将今年的销售数量作为“this_year_sales”列的值;第二个CASE WHEN语句会将去年的销售数量作为“last_year_sales”列的值;第三个CASE WHEN语句会将今年和去年的销售数量之差作为“difference”列的值。最后,使用WHERE子句来只获取今年和去年的数据,防止其他年份的数据影响结果。
用Case When语句实现订单优惠
假设你有一个在线商店,并且要对购物车内的订单进行优惠。如果订单金额大于$100,则打9折;如果订单金额大于$500,并且订单中至少有5个商品,则打8折。
SELECT
product_name,
unit_price,
qty,
unit_price * qty AS subtotal,
CASE
WHEN (unit_price * qty) >= 500 AND qty >= 5 THEN (unit_price * qty) * 0.8
WHEN (unit_price * qty) >= 100 THEN (unit_price * qty) * 0.9
ELSE (unit_price * qty)
END AS total
FROM
shopping_cart;
在上面的查询中,我们使用了Case When语句来计算订单的折扣金额。当订单金额大于$500并且数量大于等于5时,我们打8折;否则,如果订单金额大于$100,则打9折;否则没有折扣。最终,我们将计算出的总金额赋值给total列。
总结
在本篇博客中,我们学习了如何使用MySQL中的Case When语句来实现各种数据处理操作。我们通过几个例子演示了如何使用Case When语句实现数据统计、数据清洗和数据分析等操作。同时,我们也提供了两个实用案例,帮助读者更好地理解Case When语句的使用方法。
总之,Case When语句是MySQL SQL查询中非常有用的一个函数,它可以帮助你在查询过程中进行条件判断,并根据不同的条件输出不同的结果。希望本篇博客能够帮助您更好地掌握这个函数,用于提高SQL查询的效率,让你更容易编写出更高效、更准确的SQL查询语句。