欢迎光临
我们一直在努力

SQL中的Case语句怎么用

这篇文章主要介绍了SQL中的Case语句怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

SQL Case 语句语法

语法中有很多东西,但它仍然相当直观:关键字CASE表示 case 语句的开始,关键字END表示它的结束。

然后对于单个条件,您可以编写关键字,WHEN后跟必须满足的条件。之后是THEN该条件的关键字和值,例如WHEN <condition> THEN <stuff>.

然后可以跟其他WHEN/THEN语句。

最后,如果ELSE  关键字的所有条件都不为真,您可以添加一个默认使用的值,如下所示。

CASE
   WHEN condition1 THEN stuff
   WHEN condition2 THEN other stuff
   ...
   ELSE default stuff
END

让我们把它付诸实践以更好地理解它。

SQL Case 语句示例

让我们CASE在示例中使用该语句。我们有一个表格,上面列出了学生及其考试成绩。我们需要给每个学生打分,我们可以使用case语句自动完成。

ID 姓名 分数
1 西米索拉 60
2 伊万 80
3 梅托迪亚 52
4 卡勒姆 98
5 莱娅 84
6 阿帕雷西达 82
7 乌苏拉 69
8 斋月 78
9 电晕 87
10 爱丽丝 57
11 凯兰崔尔 89
12 梅雷尔 99
13 雪莉丝 55
14 尼提亚 81
15 埃尔萨德 71
16 利斯 90
17 约翰娜 90
18 安菲萨 90
19 凉介 97
20 沙猜 61
21 埃尔伯特 63
22 凯特琳 51

我们可以使用该CASE语句给每个学生一个成绩,我们将在名为 的新列中添加该成绩grade。

让我们先写下CASE陈述,我们将在其中写出每个年级的细目分类。当score为 94 或更高时,该行的值为A。如果分数为 90 或更高,则值为A-,依此类推。

  CASE
    WHEN score >= 94 THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END

编写CASE语句后,我们将把它添加到查询中。然后我们将grade使用AS关键字为列命名:

SELECT *,
  CASE
    WHEN score >= 94 THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END AS grade
FROM students_grades;

我们从这个查询中得到的表格如下所示——现在每个学生都有一个基于他们的分数的成绩。

ID 姓名 分数 年级
1 西米索拉 60 D
2 伊万 80 乙-
3 梅托迪亚 52 F
4 卡勒姆 98 一种
5 莱娅 84
6 阿帕雷西达 82 乙-
7 乌苏拉 69 D+
8 斋月 78 C+
9 电晕 87 乙+
10 爱丽丝 57 F
11 凯兰崔尔 89 乙+
12 梅雷尔 99 一种
13 雪莉丝 55 F
14 尼提亚 81 乙-
15 埃尔萨德 71 C-
16 利斯 90 一种-
17 约翰娜 90 一种-
18 安菲萨 90 一种-
19 凉介 97 一种
20 沙猜 61 D
21 埃尔伯特 63 D
22 凯特琳 51 F

更复杂的 Case 语句示例

我们还可以根据需要使用除 case 语句之外的其他语句以不同方式操作表。

案例陈述示例 1

例如,我们可以使用ORDER BY对行进行排序以将最高分排在最前面。

SELECT name,
  CASE
    WHEN score >= 94 THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END AS grade
FROM students_grades
ORDER BY score DESC;

我们根据score哪个是数字而不是grade列进行排序,因为字母顺序与基于值的等级顺序不同。我们使用DESC关键字以降序呈现它,最高值在顶部。

我们得到的表格如下所示:

姓名 年级
梅雷尔 一种
卡勒姆 一种
凉介 一种
利斯 一种-
约翰娜 一种-
安菲萨 一种-
凯兰崔尔 乙+
电晕 乙+
莱娅
阿帕雷西达 乙-
尼提亚 乙-
伊万 乙-
斋月 C+
埃尔萨德 C-
乌苏拉 D+
埃尔伯特 D
沙猜 D
西米索拉 D
爱丽丝 F
雪莉丝 F
梅托迪亚 F
凯特琳 F

Case 语句示例 2

让我们对这些数据做一些分析。我们可以使用GROUP BY并COUNT计算每个年级收到多少学生。

SELECT 
  CASE
    WHEN score >= 94
      THEN "A"
    WHEN score >= 90 THEN "A-"
    WHEN score >= 87 THEN "B+"
    WHEN score >= 83 THEN "B"
    WHEN score >= 80 THEN "B-"
    WHEN score >= 77 THEN "C+"
    WHEN score >= 73 THEN "C"
    WHEN score >= 70 THEN "C-"
    WHEN score >= 67 THEN "D+"
    WHEN score >= 60 THEN "D"
    ELSE "F"
  END AS grade,
  COUNT(*) AS number_of_students
FROM students_grades
GROUP BY grade
ORDER BY score DESC;

我们使用ORDER BY从高到低的顺序对等级进行排序,我们使用score它是一个数值(因为按grade列排序将使用字母顺序,这与按等级的值排序不同)。

年级 NUMBER_OF_STUDENTS
一种 3
一种- 3
乙+ 2
1
乙- 3
C+ 1
C- 1
D+ 1
D 3
F 4

案例陈述示例 3

让我们对这些数据做一些不同的分析。我们可以使用GROUP BYandCOUNT和一个不同的 case 语句来计算有多少学生通过了考试。然后我们可以使用ORDER BY我们喜欢的顺序排列列,通过顶部的学生人数。

SELECT 
  CASE
    WHEN score >= 60
      THEN "passed"
    ELSE "failed"
  END AS result,
  COUNT(*) AS number_of_students
FROM students_grades
GROUP BY result
ORDER BY result DESC;

我们得到的表格如下所示。班级的表现还不错,22 名学生中有 18 名学生通过了成绩——但其他 4 名学生可能需要一些帮助。

结果 NUMBER_OF_STUDENTS
通过 18
失败的 4

感谢你能够认真阅读完这篇文章,希望小编分享的“SQL中的Case语句怎么用”这篇文章对大家有帮助,同时也希望大家多多支持云搜网,关注云搜网行业资讯频道,更多相关知识等着你来学习!

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。