Skip to content

CASE条件表达式


在 SQL 中,我们经常需要根据某些条件对数据进行处理、分类或者聚合。CASE 语句 是 SQL 中的一个强大工具,它允许我们在查询中根据不同的条件返回不同的结果。它类似于其他编程语言中的 if-else 语句,但在数据库查询中它的应用极为广泛和重要。

本篇将详细介绍 CASE 语句的基本用法,并通过实例展示如何在 SQL 查询中高效地使用 CASE 语句进行条件聚合、数据替换、排序和筛选。

CASE 语句是 SQL 的 条件表达式,用于根据不同的条件返回不同的值。它的基本语法结构如下:

CASE
WHEN condition THEN result
[WHEN ...]
[ELSE default_result]
END
  • WHEN condition THEN result:如果条件 condition 为真,则返回 result

  • ELSE default_result:如果没有任何 WHEN 条件成立,则返回 default_result

  • CASE 语句允许我们在查询中灵活地处理条件。

CASE 语句最常见的用法之一是在 聚合函数(如 COUNTSUM)中进行 条件聚合。通过 CASE,我们可以根据条件对数据进行分类并计算各类的数量或总和。

假设我们有一个简单的房屋表,其中包含房屋状态字段(dwell_status),我们想要统计不同状态的房屋数量。可以使用 CASE 来实现条件聚合。

SELECT
COUNT(CASE WHEN dwell_status = '1' THEN 1 END) AS normal_house_num,
COUNT(CASE WHEN dwell_status = '2' THEN 1 END) AS overdue_house_num,
COUNT(CASE WHEN dwell_status = '3' THEN 1 END) AS idle_house_num
FROM house;

解析:

  • COUNT(CASE WHEN dwell_status = '1' THEN 1 END):统计房屋状态为 '1'(正常)的房屋数量。

  • COUNT(CASE WHEN dwell_status = '2' THEN 1 END):统计房屋状态为 '2'(过期)的房屋数量。

  • COUNT(CASE WHEN dwell_status = '3' THEN 1 END):统计房屋状态为 '3'(空置)的房屋数量。

这里的 CASE 语句通过判断每条记录的 dwell_status 值,并返回相应的结果。如果条件成立,返回 1,否则返回 NULLCOUNT 函数会统计所有返回 1 的记录数量,从而实现 条件聚合

通过这种方式,我们只用一条 SQL 查询,就能统计不同状态的房屋数量,避免了编写多个查询,提升了查询效率。

CASE 语句还可以用于 数据替换。例如,我们可以根据某个字段的值,动态替换为另一种人类可读的状态。

SELECT
name,
CASE
WHEN status = '1' THEN '正常'
WHEN status = '2' THEN '过期'
WHEN status = '3' THEN '空置'
ELSE '未知'
END AS status_label
FROM house;

解析:

这里,我们使用 CASE 语句根据 status 字段的值替换成更加直观的字符串:

  • '1' 显示为 '正常''2' 显示为 '过期''3' 显示为 '空置',其他情况显示为 '未知'

CASE 语句还可以用于 排序,按照某种条件优先级对结果进行排序。

SELECT * FROM house
ORDER BY
CASE
WHEN status = '1' THEN 1
WHEN status = '2' THEN 2
ELSE 3
END;

解析:

在这个例子中,我们使用 CASE 来按 状态优先级 排序:

  • 状态为 '1'(正常)的房屋排在最前面。

  • 状态为 '2'(过期)的房屋排在第二位。

  • 其他状态排在最后。

CASE 还可以在 SELECTWHERE 子句中实现 动态筛选。例如,动态分类数据并返回不同的字段值。

SELECT
name,
price,
CASE
WHEN price > 100 THEN 'Expensive'
WHEN price <= 100 AND price >= 50 THEN 'Affordable'
ELSE 'Cheap'
END AS price_category
FROM products;

解析:

这个查询通过 CASE 来为产品设置不同的价格类别:

  • 如果价格大于 100,分类为 'Expensive'

  • 如果价格在 50 到 100 之间,分类为 'Affordable'

  • 如果价格小于 50,分类为 'Cheap'

CASE 语句是 SQL 中非常强大的工具,能够根据条件返回不同的值,常用于:

  • 条件聚合:结合 COUNTSUM 等聚合函数,根据条件统计不同类别的数据。

  • 数据替换:根据条件替换查询结果中的字段值,使数据更直观易懂。

  • 排序:根据条件控制查询结果的排序。

  • 筛选:动态条件筛选,按类别或范围返回不同的结果。

通过 CASE 语句,我们可以让 SQL 查询更加灵活和强大,避免编写多个复杂的查询。无论是数据汇总、分类还是排序,CASE 都是非常实用的工具。