1. 什么是case when语句?
在SQL语言中,case when语句是一种条件语句,用于根据某个或多个条件来执行相应的操作。通常情况下,case when语句被用于查询语句中,用于根据不同的条件返回不同的结果。
case when语句有两种形式,一种是简单的case when语句,另一种是搜索的case when语句。下面我们将对这两种语句进行详细的介绍。
2. 简单的case when语句
简单的case when语句是最常用的一种形式,它的语法如下:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
……
ELSE result
END;
其中expression表示要进行比较的表达式或字段,value1、value2表示需要比较的值,result1、result2表示当表达式等于value1、value2时的返回结果,ELSE表示当表达式不等于任何一个value时的默认返回结果。下面我们通过一个简单的例子来进一步说明:
SELECT name, gender,
CASE gender
when 'M' then '男'
when 'F' then '女'
else '未知'
END as gender_chinese
FROM users;
上面的SQL语句中,我们定义了一个名为gender_chinese的新字段,用于表示性别的中文名称。当gender字段的值等于'M'时,gender_chinese的值为'男';当gender字段的值等于'F'时,gender_chinese的值为'女';否则gender_chinese的值为'未知'。
在执行查询时,我们可以看到返回的结果如下:
name gender gender_chinese
小明 M 男
小红 F 女
小刚 NULL 未知
从上面的结果可以看出,我们通过简单的case when语句成功地将gender字段的值转化成了中文名称。
3. 搜索的case when语句
搜索的case when语句在条件判断方面比简单的case when语句更加灵活,它的语法如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
……
ELSE result
END;
其中condition1、condition2表示需要进行比较的条件,result1、result2表示当条件condition1、condition2成立时的返回结果,ELSE表示当所有条件都不成立时的默认返回结果。下面我们通过一个例子来进一步说明:
SELECT name, age,
CASE
WHEN age < 18 THEN '未成年人'
WHEN age BETWEEN 18 AND 65 THEN '成年人'
ELSE '老年人'
END AS age_group
FROM users;
上面的SQL语句中,我们定义了一个名为age_group的新字段,用于表示年龄段。当age字段的值小于18时,age_group的值为'未成年人';当age字段的值在18和65之间时,age_group的值为'成年人';否则,age_group的值为'老年人'。我们执行该查询并查看返回结果,可以看到:
name age age_group
小明 15 未成年人
小红 25 成年人
小刚 70 老年人
从上面的结果可以看出,我们通过搜索的case when语句成功地将年龄按照不同的标准进行划分。
4. case when语句的常见应用
4.1 在WHERE语句中使用case when语句
case when语句可以在WHERE语句中使用,用于满足一些复杂的查询条件。下面我们通过一个例子来说明:
SELECT *
FROM orders
WHERE
CASE
WHEN status = '已完成' AND amount >= 100 THEN 1
WHEN status = '已取消' THEN 0
ELSE -1
END = 1;
上面的SQL语句中,我们希望查询订单状态为'已完成'且交易金额大于等于100元的订单信息。通过case when语句,我们将满足条件的订单状态转换成了数字1,并将不满足条件的订单状态转成了-1。在WHERE语句中,我们选择value等于1的记录,从而达到滤选数据的目的。
4.2 在ORDER BY语句中使用case when语句
case when语句也可以在ORDER BY语句中使用,用于按照一定的规则对查询结果进行排序。下面我们通过一个例子来说明:
SELECT *
FROM products
ORDER BY
CASE category
WHEN '食品' THEN 1
WHEN '家电' THEN 2
WHEN '服饰' THEN 3
ELSE 4
END, id DESC;
上面的SQL语句中,我们希望将商品按照类别进行排序,并将同一类别的商品按照id倒序排列。通过case when语句,我们将不同类别的商品转换成了数字1、2、3、4,从而实现了按照类别排序的目的。
4.3 利用case when语句进行数据转换
case when语句可以进行相对复杂的数据转换操作,下面我们通过一个例子来说明:
SELECT *
FROM users
WHERE
gender = CASE
WHEN age BETWEEN 0 AND 18 THEN 'F'
WHEN age BETWEEN 19 AND 45 THEN 'M'
ELSE ' '
END;
上面的SQL语句中,我们对年龄进行了分类划分,并将划分结果转化成了gender字段的值。当年龄在0到18之间时,我们将gender字段的值设置为'F';当年龄在19到45之间时,我们将gender字段的值设置为'M';否则gender字段的值为空格。这种转换可以适用于一些需要对数据进行规范化或标准化的情况。
5. 总结
通过本文的介绍,我们了解了case when语句的两种常见形式(简单的case when语句和搜索的case when语句)以及它的三种常见应用(在WHERE语句中使用、在ORDER BY语句中使用、利用case when语句进行数据转换)。作为SQL语言中的一个重要组成部分,case when语句无疑能够丰富我们的查询能力,在日常的数据分析和处理中发挥重要的作用。