1. MySQL数据汇总与CASE WHEN实战指南
在数据库查询中,数据汇总和分类是常见的需求。MySQL的CASE WHEN语句为我们提供了强大的条件判断能力,结合GROUP BY等聚合函数,可以实现灵活的数据分组和统计。本文将深入探讨CASE WHEN的各种应用场景,并通过实际案例演示如何高效地进行数据汇总。
1.1 CASE WHEN基础语法与应用
CASE WHEN是SQL中的条件表达式,它允许我们根据特定条件返回不同的值。基本语法结构如下:
sql复制CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
ELSE default_result
END
1.1.1 简单分类示例
假设我们有一个产品表,需要根据库存量对产品进行分类:
sql复制SELECT
product_id,
product_name,
units_in_stock,
CASE
WHEN units_in_stock > 100 THEN 'high'
WHEN units_in_stock > 50 THEN 'moderate'
WHEN units_in_stock > 0 THEN 'low'
WHEN units_in_stock = 0 THEN 'none'
END AS availability
FROM products;
这个查询会创建一个新列availability,根据units_in_stock的值将产品分为四类:
- 库存>100:高(high)
- 50<库存≤100:中等(moderate)
- 0<库存≤50:低(low)
- 库存=0:无(none)
1.1.2 ELSE子句的重要性
在CASE WHEN语句中,ELSE子句用于指定当所有条件都不满足时的默认返回值。如果不指定ELSE且没有条件匹配,结果将为NULL。
例如,计算运费时,北美地区免运费,其他地区运费10美元:
sql复制SELECT
order_id,
customer_id,
ship_country,
CASE
WHEN ship_country = 'USA' OR ship_country = 'Canada' THEN 0.0
ELSE 10.0
END AS shipping_cost
FROM orders
WHERE order_id BETWEEN 10720 AND 10730;
如果不加ELSE子句,非北美地区的运费将显示为NULL,这通常不是我们想要的结果。
