App下載

SQL 中的 Case 語句 ?查詢代碼示例

糖果味的夏天 2021-08-26 15:21:29 瀏覽數(shù) (4372)
反饋

如果您需要根據(jù)其他單元格有條件地向單元格添加值,則將使用 SQL 的 case 語句。如果您了解其他語言,則 SQL 中的 case 語句類似于 if 語句或 switch 語句。它允許您有條件地指定一個(gè)值,以便根據(jù)滿足的條件,在單元格中獲得不同的值。這在數(shù)據(jù)分析中非常重要,因此在介紹案例陳述之后,我們將看到幾個(gè)示例,說明如何使用它以簡單的方式分析數(shù)據(jù)。

SQL Case 語句語法

語法中有很多東西,但它仍然相當(dāng)直觀:關(guān)鍵字CASE表示 case 語句的開始,關(guān)鍵字END表示它的結(jié)束。

然后對(duì)于單個(gè)條件,您可以編寫關(guān)鍵字,WHEN后跟必須滿足的條件。之后是THEN該條件的關(guān)鍵字和值,例如WHEN <condition> THEN <stuff>.

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

最后,如果ELSE  關(guān)鍵字的所有條件都不為真,您可以添加一個(gè)默認(rèn)使用的值,如下所示。

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

讓我們把它付諸實(shí)踐以更好地理解它。

SQL Case 語句示例

讓我們CASE在示例中使用該語句。我們有一個(gè)表格,上面列出了學(xué)生及其考試成績。我們需要給每個(gè)學(xué)生打分,我們可以使用case語句自動(dòng)完成。

ID姓名分?jǐn)?shù)
1西米索拉60
2伊萬80
3梅托迪亞52
4卡勒姆98
5萊婭84
6阿帕雷西達(dá)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語句給每個(gè)學(xué)生一個(gè)成績,我們將在名為 的新列中添加該成績grade。

讓我們先寫下CASE陳述,我們將在其中寫出每個(gè)年級(jí)的細(xì)目分類。當(dāng)score為 94 或更高時(shí),該行的值為A。如果分?jǐn)?shù)為 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關(guān)鍵字為列命名:

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;

我們從這個(gè)查詢中得到的表格如下所示——現(xiàn)在每個(gè)學(xué)生都有一個(gè)基于他們的分?jǐn)?shù)的成績。

ID姓名分?jǐn)?shù)年級(jí)
1西米索拉60D
2伊萬80乙-
3梅托迪亞52F
4卡勒姆98一種
5萊婭84
6阿帕雷西達(dá)82乙-
7烏蘇拉69D+
8齋月78C+
9電暈87乙+
10愛麗絲57F
11凱蘭崔爾89乙+
12梅雷爾99一種
13雪莉絲55F
14尼提亞81乙-
15埃爾薩德71C-
16利斯90一種-
17約翰娜90一種-
18安菲薩90一種-
19涼介97一種
20沙猜61D
21埃爾伯特63D
22凱特琳51F

更復(fù)雜的 Case 語句示例

我們還可以根據(jù)需要使用除 case 語句之外的其他語句以不同方式操作表。

案例陳述示例 1

例如,我們可以使用ORDER BY對(duì)行進(jìn)行排序以將最高分排在最前面。

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;

我們根據(jù)score哪個(gè)是數(shù)字而不是grade列進(jìn)行排序,因?yàn)樽帜疙樞蚺c基于值的等級(jí)順序不同。我們使用DESC關(guān)鍵字以降序呈現(xiàn)它,最高值在頂部。

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

姓名年級(jí)
梅雷爾一種
卡勒姆一種
涼介一種
利斯一種-
約翰娜一種-
安菲薩一種-
凱蘭崔爾乙+
電暈乙+
萊婭
阿帕雷西達(dá)乙-
尼提亞乙-
伊萬乙-
齋月C+
埃爾薩德C-
烏蘇拉D+
埃爾伯特D
沙猜D
西米索拉D
愛麗絲F
雪莉絲F
梅托迪亞F
凱特琳F

Case 語句示例 2

讓我們對(duì)這些數(shù)據(jù)做一些分析。我們可以使用GROUP BY并COUNT計(jì)算每個(gè)年級(jí)收到多少學(xué)生。

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從高到低的順序?qū)Φ燃?jí)進(jìn)行排序,我們使用score它是一個(gè)數(shù)值(因?yàn)榘磄rade列排序?qū)⑹褂米帜疙樞?,這與按等級(jí)的值排序不同)。

年級(jí)NUMBER_OF_STUDENTS
一種3
一種-3
乙+2
1
乙-3
C+1
C-1
D+1
D3
F4

案例陳述示例 3

讓我們對(duì)這些數(shù)據(jù)做一些不同的分析。我們可以使用GROUP BYandCOUNT和一個(gè)不同的 case 語句來計(jì)算有多少學(xué)生通過了考試。然后我們可以使用ORDER BY我們喜歡的順序排列列,通過頂部的學(xué)生人數(shù)。

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;

我們得到的表格如下所示。班級(jí)的表現(xiàn)還不錯(cuò),22 名學(xué)生中有 18 名學(xué)生通過了成績——但其他 4 名學(xué)生可能需要一些幫助。

結(jié)果NUMBER_OF_STUDENTS
通過18
失敗的4

結(jié)論

case 語句是一個(gè)強(qiáng)大的工具,當(dāng)您需要根據(jù)特定條件獲取值時(shí),您可以使用它。

在本文中,您已經(jīng)學(xué)習(xí)了如何使用它,并且您已經(jīng)看到了一些關(guān)于如何將其用于數(shù)據(jù)分析的示例。


SQL

0 人點(diǎn)贊