sql中的case when函数
时间: 2023-11-19 07:50:55 浏览: 93
SQL中的CASE WHEN函数是一种条件表达式,用于根据条件返回不同的值。它的语法如下:
```
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END
```
其中,condition1、condition2等是条件表达式,result1、result2等是对应条件表达式为真时返回的结果,ELSE子句是可选的,表示所有条件都不满足时返回的默认结果。
例如,以下SQL语句使用CASE WHEN函数将学生的成绩按照分数段进行分类:
```
SELECT name, score,
CASE WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS grade
FROM student;
```
相关问题
sql函数 case when
SQL函数 CASE WHEN 是一种条件表达式,用于在查询过程中根据条件执行不同的操作或返回不同的值。它的基本语法如下:
```sql
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE result
END
```
其中,`condition1`, `condition2`, ..., `conditionN` 是待检查的条件,`result1`, `result2`, ..., `resultN` 是与条件匹配时返回的结果值,`result` 是当没有任何条件匹配时返回的默认值(可选)。
下面是一个示例,假设有一个名为 `users` 的表,其中包含 `name` 和 `age` 两列:
```sql
SELECT name,
CASE
WHEN age < 18 THEN 'Child'
WHEN age >= 18 AND age < 65 THEN 'Adult'
ELSE 'Senior'
END AS age_group
FROM users;
```
上述查询将根据用户的年龄将其分为三个年龄组:儿童、成年人和老年人,并在结果集中显示对应的 `age_group` 列。
请注意,CASE WHEN 还可以嵌套使用,并且可以与其他 SQL 函数和表达式结合使用,以实现更复杂的逻辑和计算。
SQL中CASE WHEN
### SQL CASE WHEN 语句解析
#### 简单 CASE WHEN 语句
简单 `CASE` 表达式的结构如下:
```sql
CASE input_expression
WHEN when_expression_1 THEN result_expression_1
...
[ELSE else_result_expression]
END
```
此形式适用于当测试多个可能的结果是否等于某个单一表达式时。例如,如果想要将成绩转换成文字描述,则可以这样写[^1]。
#### 搜索条件 CASE WHEN 语句
更常见的 `CASE` 形式是带有搜索条件的形式,它可以更加灵活地定义各种逻辑判断标准:
```sql
CASE
WHEN condition_1 THEN result_1
...
[ELSE else_result]
END
```
这种情况下,不是比较两个值之间的相等关系,而是评估布尔表达式来决定执行哪一部分代码[^4]。
#### 实际案例展示
考虑一个场景,在学生评分表中存在分数字段 `score` ,现在希望基于这些数值生成一个新的等级列 `grade` 。可以通过以下方式完成这一操作:
```sql
SELECT name, score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score BETWEEN 80 AND 89 THEN '良好'
WHEN score BETWEEN 70 AND 79 THEN '一般'
ELSE '不合格'
END AS grade
FROM students;
```
上述查询会根据学生的具体得分给予相应的评价标签[^3]。
#### 使用 CASE WHEN 进行分组统计
除了在选择列表里构建新列外,还可以利用 `CASE` 在聚合函数内实施分类汇总工作。比如按照性别区分平均工资水平:
```sql
SELECT AVG(CASE gender WHEN 'M' THEN salary END) as male_avg_salary,
AVG(CASE gender WHEN 'F' THEN salary END) as female_avg_salary
FROM employees;
```
这里通过 `GROUP BY` 和 `CASE` 的组合实现了按不同类别分别求均值的效果[^2]。
阅读全文
相关推荐














