MYSQL控制流函数CASE是如何工作的?

介绍

CASE是MySQL中的一种控制流函数,可以根据一个或多个条件测试返回不同的结果。它类似于编程语言中的switch语句,可以对表达式进行测试并返回匹配的结果。

语法

的语法如下:

CASE expression

WHEN value1 THEN result1

WHEN value2 THEN result2

...

[ELSE else_result]

END

其中expression是要测试的表达式,value1、value2等是可能的值,而result1、result2等是相应的结果。如果没有匹配的值,则可以使用ELSE子句指定默认结果。

示例

下面是一个简单的示例,根据学生的分数等级返回字母成绩:

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 'F'

END AS grade

FROM students;

在这个例子中,根据学生的分数等级返回字母成绩。如果分数大于或等于90,则返回A;如果分数大于或等于80,则返回B;如果分数大于或等于70,则返回C;如果分数大于或等于60,则返回D;否则返回F。

CASE语句的灵活性

CASE语句非常灵活,可以根据需要使用多个条件测试和嵌套CASE语句。在下面的示例中,我们简化了学生成绩等级的计算方法,并将“+”和“-”等级添加到结果中:

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 'F'

END AS grade,

CASE

WHEN score % 10 BETWEEN 0 AND 2 THEN '-'

WHEN score % 10 BETWEEN 8 AND 9 THEN '+'

ELSE ''

END AS modifier

FROM students;

在这个例子中,我们使用了两个CASE语句:第一个CASE语句根据学生的分数计算字母成绩,如果分数大于或等于90,则返回A,否则如果分数大于或等于80,则返回B,以此类推,最后是默认的F等级。第二个CASE语句将使用“+”和“-”符号修改成绩。如果分数的个位数在0到2之间,则表示成绩下降,否则如果分数的个位数在8到9之间,则表示成绩提高,最后是没有任何修饰符的默认情况。

使用CASE函数来计算字段

CASE语句还可以用于计算新的列。在下面的示例中,我们将使用CASE语句计算学生的GPA,并将结果保存在新的GPA列中:

SELECT name, score, credits,

CASE

WHEN score >= 90 THEN 4.0

WHEN score >= 80 THEN 3.0

WHEN score >= 70 THEN 2.0

WHEN score >= 60 THEN 1.0

ELSE 0.0

END AS grade_point,

credits *

CASE

WHEN score >= 90 THEN 4.0

WHEN score >= 80 THEN 3.0

WHEN score >= 70 THEN 2.0

WHEN score >= 60 THEN 1.0

ELSE 0.0

END AS quality_points,

credits *

CASE

WHEN score >= 90 THEN 4.0

WHEN score >= 80 THEN 3.0

WHEN score >= 70 THEN 2.0

WHEN score >= 60 THEN 1.0

ELSE 0.0

END /

credits AS gpa

FROM students;

在这个例子中,我们计算了学生的成绩点(即4.0、3.0、2.0、1.0或0.0),并使用它来计算质量点(即成绩点乘以学分)。然后,我们使用总学分除以总质量点来计算GPA。

总结

CASE是MySQL中的一个非常有用的控制流函数,它可以根据条件测试返回不同的结果。它非常灵活,可以根据需要包含多个测试和嵌套CASE语句。还可以使用CASE语句计算新的列,并在SELECT语句中使用计算后的列。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签