介绍
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语句中使用计算后的列。