当前位置:   article > 正文

SQL语法 case when语句用法讲解_sql case when

sql case when

CASE WHEN解释


SQL中的CASE WHEN语句是一种条件表达式,它允许你根据不同的情况返回不同的值。CASE WHEN通常用于SELECT语句中,用于创建新的列,该列的值取决于其他列的值。CASE WHEN可以用于任何可以使用表达式的地方。

大致概述:

case when 条件1 then 结果1 else 结果2 end
  • 1

如何满足条件1 就选取结果1做结果,否则结果2,结束

case 
when 条件1 then 结果1
when 条件2 then 结果2  
when 条件3 then 结果3 else 结果4 end
  • 1
  • 2
  • 3
  • 4

判断是否满足条件1,满足选取 结果1,
否则继续判断是否满足条件2,满足选取 结果2,
否则继续判断是否满足条件3,满足选取 结果3,否则选用结果4,
结果4 相当与 一个默认值,如果不满足条件1、2、3,就用默认值

CASE WHEN有两种主要形式:

  1. 简单Case表达式
  2. 搜索Case表达式

简单Case表达式

SELECT column_name,
       CASE input_column
           WHEN value1 THEN result1
           WHEN value2 THEN result2
           ...
           ELSE default_result
       END AS alias_name
FROM table_name;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

搜索Case表达式

SELECT column_name,
       CASE
           WHEN condition1 THEN result1
           WHEN condition2 THEN result2
           ...
           ELSE default_result
       END AS alias_name
FROM table_name;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

示例1:

假设有一个学生成绩表student_scores,包含字段namescore,我们想根据分数给学生划分等级:

  • 分数大于等于90为A级
  • 分数大于等于80为B级
  • 分数大于等于70为C级
  • 分数大于等于60为D级
  • 其他为E级
    使用CASE WHEN的SQL语句如下:
SELECT name,
       score,
       CASE
           WHEN score >= 90 THEN 'A级'
           WHEN score >= 80 THEN 'B级'
           WHEN score >= 70 THEN 'C级'
           WHEN score >= 60 THEN 'D级'
           ELSE 'E级'
       END AS grade
FROM student_scores;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这个查询会返回每个学生的名字、分数和对应的等级。如果score字段的值满足某个WHEN子句中的条件,CASE表达式就会返回那个THEN子句中的值。如果都不满足,则返回ELSE子句中的值。如果省略了ELSE子句,并且没有任何WHEN子句为真,结果将为NULL

示例2:

这里有两个表,一个学生表student,一个学生成绩表score
student:
在这里插入图片描述
score:
在这里插入图片描述
我们根据每一位学生成绩的总分的来判断是优、良、差,并按照总成绩排序

select 
	a.Student_ID,
	a.name,
	b.sumgrade as "总成绩",
	CASE 
	WHEN b.sumgrade >= 160 THEN '优'
	WHEN b.sumgrade < 160 and b.sumgrade >= 140 THEN '良'
	WHEN b.sumgrade < 140 and b.sumgrade >= 120 THEN '及格'
	ELSE '差' END as '评级'
from student a
left join (select Student_ID,sum(grade) sumgrade from score GROUP BY Student_ID) b on a.Student_ID = b.Student_ID 
ORDER BY b.sumgrade DESC
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

结果:
在这里插入图片描述

题主学习记录,大家多多包涵。

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/931484
推荐阅读
相关标签
  

闽ICP备14008679号