溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SQL中的Case語句怎么用

發(fā)布時間:2022-02-23 13:47:20 來源:億速云 閱讀:351 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹了SQL中的Case語句怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

SQL Case 語句語法

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

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

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

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

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

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

SQL Case 語句示例

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

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語句給每個學(xué)生一個成績,我們將在名為 的新列中添加該成績grade。

讓我們先寫下CASE陳述,我們將在其中寫出每個年級的細(xì)目分類。當(dāng)score為 94 或更高時,該行的值為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;

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

ID姓名分?jǐn)?shù)年級
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對行進(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哪個是數(shù)字而不是grade列進(jìn)行排序,因?yàn)樽帜疙樞蚺c基于值的等級順序不同。我們使用DESC關(guān)鍵字以降序呈現(xiàn)它,最高值在頂部。

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

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

Case 語句示例 2

讓我們對這些數(shù)據(jù)做一些分析。我們可以使用GROUP BY并COUNT計(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ū)Φ燃夁M(jìn)行排序,我們使用score它是一個數(shù)值(因?yàn)榘磄rade列排序?qū)⑹褂米帜疙樞?,這與按等級的值排序不同)。

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

案例陳述示例 3

讓我們對這些數(shù)據(jù)做一些不同的分析。我們可以使用GROUP BYandCOUNT和一個不同的 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;

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

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

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“SQL中的Case語句怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI