如果您需要根据其他单元格有条件地向单元格添加值,则将使用 SQL 的 case 语句。如果您了解其他语言,则 SQL 中的 case 语句类似于 if 语句或 switch 语句。它允许您有条件地指定一个值,以便根据满足的条件,在单元格中获得不同的值。这在数据分析中非常重要,因此在介绍案例陈述之后,我们将看到几个示例,说明如何使用它以简单的方式分析数据。

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

结论

case 语句是一个强大的工具,当您需要根据特定条件获取值时,您可以使用它。

在本文中,您已经学习了如何使用它,并且您已经看到了一些关于如何将其用于数据分析的示例。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。