App下載

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

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

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

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姓名分數(shù)
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。如果分數(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關鍵字為列命名:

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;

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

ID姓名分數(shù)年級
1西米索拉60D
2伊萬80乙-
3梅托迪亞52F
4卡勒姆98一種
5萊婭84
6阿帕雷西達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

更復雜的 Case 語句示例

我們還可以根據(jù)需要使用除 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;

我們根據(jù)score哪個是數(shù)字而不是grade列進行排序,因為字母順序與基于值的等級順序不同。我們使用DESC關鍵字以降序呈現(xiàn)它,最高值在頂部。

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

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

Case 語句示例 2

讓我們對這些數(shù)據(jù)做一些分析。我們可以使用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它是一個數(shù)值(因為按grade列排序將使用字母順序,這與按等級的值排序不同)。

年級NUMBER_OF_STUDENTS
一種3
一種-3
乙+2
1
乙-3
C+1
C-1
D+1
D3
F4

案例陳述示例 3

讓我們對這些數(shù)據(jù)做一些不同的分析。我們可以使用GROUP BYandCOUNT和一個不同的 case 語句來計算有多少學生通過了考試。然后我們可以使用ORDER BY我們喜歡的順序排列列,通過頂部的學生人數(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;

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

結果NUMBER_OF_STUDENTS
通過18
失敗的4

結論

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

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


SQL

0 人點贊