一、前言
本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。
CASE表达式包含两种形式,一种是简单形式,一种是搜索形式。下面将分别介绍这两种形式的写法、语法以及使用方法。
CASE input_expression WHEN when_expression THEN result_expression [...n] [ELSE else_result_expression] END |
SELECT name ,salary ,CASE salary WHEN 15000 THEN '初级' WHEN 20000 THEN '中级' WHEN 25000 THEN '高级' WHEN 30000 THEN '高级' WHEN 35000 THEN '高级' ELSE NULL END AS level FROM company ORDER BY salary; |
SQL语句解析:
这段SQL是从“company”表中选择员工的名字(name)、薪水(salary)以及一个根据薪水等级分类的字段(level)。并使用“ORDER BY salary”语句将结果按照薪水从低到高的顺序进行排序。
如果“salary”字段的值等于15000,那么“level”字段的值就是“初级”。
如果“salary”字段的值等于20000,那么“level”字段的值就是“中级”。
如果“salary”字段的值等于25000或30000或35000,那么“level”字段的值都是“高级”。
如果“salary”字段的值不等于以上任何值,那么“level”字段的值就是NULL。
CASE WHEN boolean_expression THEN result_expression [...n] [ELSE else_result_expression] END |
其中,boolean_expression等表示需要比较的条件,result_expression等表示满足对应条件时的操作结果,else_result_expression表示当expression不满足任何条件时的默认结果。
boolean_expression:可以包含子查询,但整个boolean_expression表达式返回值只能是布尔类型。
如果没有取值为TRUE的Boolean_expression,则当指定ELSE子句时,DLI将返回else_result_expression;当没有指定ELSE子句时,返回NULL值。
SELECT name ,salary ,CASE WHEN salary < 15000 THEN '初级' WHEN salary BETWEEN 15000 AND 25000 THEN '中级' WHEN salary >25000 THEN '高级' ELSE NULL END AS level FROM company ORDER BY salary; |
这段SQL同上文,是从"company"表中选择员工的姓名(name)、薪水(salary)以及根据薪水等级进行分类(level)。
当薪水(salary)小于15000时,薪水等级被标记为"初级"。
当薪水在15000和25000之间(包括15000和25000)时,薪水等级被标记为"中级"。
当薪水大于25000时,薪水等级被标记为"高级"。
如果以上条件都不满足,薪水等级被标记为NULL。
附:常见使用场景,如:二次定义标签、饱和度统计、计算指标、数据格式转换等。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!