sql case when用法

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语句,希望本文能够为你提供一些参考。

数据库标签