1. 什么是SQL CASE WHEN语句
SQL CASE WHEN语句是结构化查询语言(SQL)中的一种逻辑语句,它的作用类似于if-else语句,可以让我们根据特定的条件对数据进行分类和显示。我们可以利用CASE WHEN语句根据特定的条件对数据进行分类、计算、筛选,然后将结果返回。
SQL CASE WHEN语句的语法如下:
SELECT
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
…
ELSE default_result
END
FROM table_name;
1.1 语法解释
SELECT是SQL语句的基本关键字之一,用于查询数据表中的数据,后面要跟要查询的列名或所有的列(*),在这里我们要返回的是一个结果列,该列由CASE WHEN语句返回。
CASE是逻辑语句的关键字,当要进行逻辑处理时需要使用该关键字。在后面的WHEN语句中,我们可以列出每个条件和它们对应的结果,如果所有条件都不成立,那么可以在ELSE语句中指定一个默认结果。
2. 示例
下面我们来看一个简单的示例,通过使用CASE WHEN语句对一个销售订单进行分组计算:
SELECT
CASE
WHEN sell_price >= 5000 THEN '高价值订单'
WHEN sell_price >= 1000 AND sell_price <5000 THEN '中价值订单'
ELSE '低价值订单'
END AS order_value,
COUNT(*)
FROM orders
GROUP BY order_value;
2.1 语句解释
以上SQL语句语句会根据订单的总销售额将所有订单分组为“高价值订单”、“中价值订单”和“低价值订单”三类,然后计算每个类别中订单的数量,并将结果返回。
上面的语句中,CASE WHEN语句根据销售价格将所有订单分为三类:“高价值订单”、“中价值订单”和“低价值订单”。在后面的SELECT语句中,我们指定了要返回的结果列,并将其命名为order_value。在GROUP BY语句中,我们按照order_value列对订单进行分组,并使用COUNT(*)函数计算每个组中订单的数量。
3. More
3.1 求和计算
我们可以在CASE WHEN语句内部计算某些列的值,并将这些值用于求和计算。例如:
SELECT
SUM(CASE
WHEN city = 'New York' THEN sales
ELSE 0
END) AS ny_sales,
SUM(CASE
WHEN city = 'San Francisco' THEN sales
ELSE 0
END) AS sf_sales
FROM sales_data;
上面的SQL语句将销售数据根据所在城市进行分组,并将每个城市的销售额分别求和,返回结果中包含两个列:ny_sales和sf_sales,分别表示纽约和旧金山的销售额。
3.2 多个值的分类
我们可以使用IN语句联合CASE WHEN语句来对符合特定条件的多个值进行分类。例如:
SELECT
CASE
WHEN product_id IN (1001, 1003, 1005) THEN 'A类产品'
WHEN product_id IN (1002, 1004, 1006) THEN 'B类产品'
ELSE '未知类别'
END AS product_category,
COUNT(*)
FROM sales_data
GROUP BY product_category;
上面的SQL语句将产品根据其ID分为两类,A类产品和B类产品,并将每类产品的销售数量进行统计。
3.3 更多实例
以下是一些其他用例和相应的SQL CASE WHEN语句实例:
3.3.1 统计每个月的订单数量
SELECT
EXTRACT(YEAR FROM order_date) AS order_year,
EXTRACT(MONTH FROM order_date) AS order_month,
COUNT(*) AS order_count
FROM orders
GROUP BY order_year, order_month;
3.3.2 根据日期计算季度
SELECT
order_date,
CASE
WHEN EXTRACT(MONTH FROM order_date) IN (1, 2, 3) THEN 'Q1'
WHEN EXTRACT(MONTH FROM order_date) IN (4, 5, 6) THEN 'Q2'
WHEN EXTRACT(MONTH FROM order_date) IN (7, 8, 9) THEN 'Q3'
ELSE 'Q4'
END AS quarter
FROM orders;
3.3.3 计算销售额的平均值
SELECT
AVG(CASE
WHEN category = 'books' THEN sell_price
WHEN category = 'electronics' THEN sell_price * 0.9
ELSE sell_price * 0.8
END) AS avg_sell_price
FROM sales_data;
4. 总结
SQL CASE WHEN语句允许我们根据多个条件对数据进行分类和计算,从而深入了解数据的特征和模式。在实际数据处理中,我们可以使用它来完成各种需要数据分组和分类的计算任务。如果你还没有使用过SQL CASE WHEN语句,希望本文能够为你提供一些参考。