详解SQL之CASE WHEN具体用法
简介
CASE WHEN
是 SQL 中的条件表达式,可以根据不同的条件进行不同的处理,常用于数据转换、分类统计等场景。
通常的形式如下:
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
其中,condition1
、condition2
等为条件表达式,result1
、result2
等为满足相应条件时的结果,default_result
为条件都不满足时的默认结果。
示例1:数据转换
假设有一个订单表 orders
,其中有一列 status
用于记录订单的状态,取值为 1、2、3 三个数字,分别代表“待支付”、“已支付”、“已完成”三种状态。现在需要将其转换为文字描述,即将 1 转换成“待支付”,2 转换成“已支付”,3 转换成“已完成”。
SELECT id,
CASE
WHEN status = 1 THEN '待支付'
WHEN status = 2 THEN '已支付'
WHEN status = 3 THEN '已完成'
ELSE '未知状态'
END AS status_desc
FROM orders
上述 SQL 语句中,通过 CASE WHEN
表达式判断 status
值,根据不同的取值转换为对应的文字描述。当 status
值既不是 1、2、3 中的任何一个时,使用 ELSE
子句指定为“未知状态”。
示例2:分类统计
假设有一个学生表 students
,其中有两列 gender
和 score
,分别用于记录学生的性别和分数。现在需要按照不同的性别统计男生和女生的个数,并将总分数和平均分分别计算出来。
SELECT gender,
COUNT(*) AS count,
SUM(score) AS sum_score,
AVG(score) AS avg_score
FROM students
GROUP BY gender
上述 SQL 语句中,通过 COUNT
、SUM
、AVG
等聚合函数对学生表进行统计。但是,如果需要将男生和女生分别统计,可以使用 CASE WHEN
表达式进行分类处理。
SELECT CASE gender
WHEN 'M' THEN '男'
WHEN 'F' THEN '女'
ELSE '未知性别'
END AS gender_desc,
COUNT(*) AS count,
SUM(score) AS sum_score,
AVG(score) AS avg_score
FROM students
GROUP BY gender_desc
上述 SQL 语句中,对 gender
列进行了转换,将 'M'
转换成了 '男'
,将 'F'
转换成了 '女'
,同时还使用了 GROUP BY
子句按照分类后的 gender_desc
进行分组统计。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SQL之CASE WHEN具体用法 - Python技术站