跳到主要内容

SQL中的CASE语句

提示
  1. 基本用法:SQL中的CASE语句用于根据一系列条件评估并返回特定值,通常与SELECT语句一起使用。
  2. 多重条件CASE语句可以包含多个WHEN条件,用于检查多个情况,还可以包含一个ELSE子句作为默认情况。
  3. 示例应用CASE语句可以用于多种场景,例如根据金额大小分类(高或低),或根据客户国家名进行条件化的数据显示。

SQL CASE 语句会逐一评估一系列条件,并根据该条件返回一个值。

示例

-- 如果金额为10000或以上,则存储 'High'
-- 如果金额小于10000,则存储 'Low'

SELECT order_id, item, amount,
CASE
WHEN amount >= 10000 THEN 'High'
WHEN amount < 10000 THEN 'Low'
END AS amount_category
FROM Orders;

SQL CASE 语句语法

SQL CASE 语句的语法如下:

SELECT column1, column2,... ,
CASE
WHEN condition THEN result
END AS Alias
FROM table;

这里,

  • column1, column2, ... 是要包含在结果集中的列的名称
  • CASE 检查 condition
  • result 是如果满足 condition 则要插入到新列中的结果或值
  • END 结束 CASE 语句
  • AS Alias 指定新列的 Alias 名称
  • table 是表的名称。

注意: CASE 的语法始终以 CASE 关键字开始,并以 END 关键字和一个列名别名结束。

示例 1:SQL CASE

-- 如果顾客年龄超过17岁,则在其中插入 'Allowed'

SELECT customer_id, first_name,
CASE
WHEN age >= 18 THEN 'Allowed'
END AS can_vote
FROM Customers;

这里,SQL 命令检查每一行并应用给定的情况。结果集包含

  • 带有 customer_idfirst_name 及其值的列
  • 对于 age 大于或等于 18 的行,can_vote 列中为 Allowed

如何在 SQL 中使用 CASE

示例 2:SQL CASE 语句

让我们看一个另外的示例,我们想要在圣诞促销期间为每个订单提供 10% 的折扣如果金额为400或更多

CASE
WHEN amount >= 400 THEN (amount - amount * 10/100)
END AS offer_price
FROM Orders;

这里,SQL 命令检查 amount 是否大于或等于 400。如果满足此条件,新列 offer_price 将包含等于 amount - amount*10/100 的值。

带有多个条件的 SQL CASE

在单个 CASE 子句中堆叠多个条件也是可能的。

```sql exec-- SQL中的多重 CASE 条件 SELECT customer_id, first_name, CASE WHEN country = 'USA' THEN 'United States of America' WHEN country = 'UK' THEN 'United Kingdom' END AS country_name FROM Customers;


这里,结果集将包含一个名为 `country_name` 的列,以及 `customer_id` 和 `first_name` 列。

如果 `country` 等于 **USA**,则 `country_name` 的值将为 **United States of America**。

类似地,如果 `country` 等于 **UK**,则 `country_name` 的值将为 **United Kingdom**。

## 带有 `ELSE` 的 SQL `CASE`

`CASE` 语句可以有一个可选的 `ELSE` 子句。如果 `CASE` 语句中的所有条件都不匹配,则执行 `ELSE` 子句。

例如,

```sql exec-- 带有 `ELSE` 子句的 SQL `CASE` 条件
SELECT customer_id, first_name,
CASE
WHEN country = 'USA' THEN 'United States of America'
WHEN country = 'UK' THEN 'United Kingdom'
ELSE 'Unknown Country'
END AS country_name
FROM Customers;

这里,结果集将包含一个名为 country_name 的字段,以及 customer_idfirst_name

country_name 的值

将为:

  • 如果 countryUSA,则为 United States of America
  • 如果 countryUK,则为 United Kingdom
  • 如果 country 既不是 USA 也不是 UK(因为有 ELSE 子句),则为 Unknown Country

如何在 SQL 中使用带有 ELSE 的 CASE