SQL之CASE WHEN用法,轻松搞定数据统计
2023-01-21 13:10:28
使用 CASE WHEN 语句简化数据统计
引言
在数据分析领域,我们经常需要对不同条件下的数据进行统计。例如,我们可能需要统计特定性别学生的数量、计算及格学生的比例,或汇总不同能源类型的花费。SQL 中强大的 CASE WHEN 语句可以轻松地满足这些统计需求。
CASE WHEN 语句剖析
CASE WHEN 语句允许我们根据一组条件对数据进行分类并返回相应的结果。其语法如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result
END
其中:
- condition1、condition2... 是布尔条件,即只能返回真或假的值。
- result1、result2... 是当相应条件为真时返回的结果。
- ELSE 子句(可选)指定当所有条件都不满足时返回的结果。
统计班中男女学生数量
假设我们有一个名为 "students" 的表,其中包含学生的性别信息。我们可以使用 CASE WHEN 语句统计男生和女生的数量:
SELECT
SUM(CASE WHEN sex = '男' THEN 1 ELSE 0 END) AS male_count,
SUM(CASE WHEN sex = '女' THEN 1 ELSE 0 END) AS female_count
FROM
students;
这段代码会分别计算性别为 "男" 和 "女" 的学生数量,并将结果存储在变量 male_count
和 female_count
中。
计算及格学生比例
同样,我们可以使用 CASE WHEN 语句统计及格学生的人数:
SELECT
SUM(CASE WHEN score >= 60 THEN 1 ELSE 0 END) AS pass_count
FROM
students;
这段代码会计算成绩大于或等于 60 的学生数量,并将其存储在变量 pass_count
中。
汇总不同能源类型的开支
在能源消耗分析中,我们可以使用 CASE WHEN 语句计算不同能源类型(例如,电力、天然气)的花费:
SELECT
E_TYPE,
SUM(CASE
WHEN P_LEVEL = 0 THEN P_PRICE
WHEN P_LEVEL = 1 THEN P_PRICE * 2
ELSE 0
END) AS total_price
FROM
energy_consumption
GROUP BY
E_TYPE;
这段代码会计算每种能源类型在不同价格等级(P_LEVEL)下的总费用。
CASE WHEN 语句注意事项
- 确保条件是布尔类型的,否则会导致错误。
- 结果可以是任何数据类型。
- 省略 ELSE 子句会导致所有条件不满足时返回 NULL。
CASE WHEN 语句的优势
CASE WHEN 语句的优势包括:
- 简洁性: 可以将多个条件判断合并到一个语句中,使代码更简洁。
- 结构化: 避免使用多个 IF ELSE 语句,使代码更具可读性和可维护性。
- 效率: 通过消除重复的条件判断,提高查询效率。
总结
CASE WHEN 语句是一个功能强大的工具,可以简化数据统计任务。通过遵循适当的语法和注意事项,可以有效地利用 CASE WHEN 语句提高数据分析效率并获得有意义的见解。
常见问题解答
- CASE WHEN 语句与 IF ELSE 语句有什么区别?
CASE WHEN 语句将条件判断和结果合并到一个语句中,而 IF ELSE 语句需要为每个条件编写单独的语句块。
- CASE WHEN 语句是否支持嵌套条件?
是的,CASE WHEN 语句支持嵌套条件,允许根据更复杂的条件逻辑进行数据分类。
- CASE WHEN 语句是否可以返回多个结果?
是的,CASE WHEN 语句可以返回多个结果,具体取决于条件的数量和结果类型。
- 如何处理 CASE WHEN 语句中可能出现的 NULL 值?
可以通过在 ELSE 子句中指定默认结果或使用 IS NULL 条件来处理 NULL 值。
- CASE WHEN 语句可以用来统计唯一值吗?
不,CASE WHEN 语句不能直接用来统计唯一值。需要使用 DISTINCT 或 GROUP BY 子句来实现此目的。