您好,登錄后才能下訂單哦!
這篇文章主要介紹了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
讓我們把它付諸實踐以更好地理解它。
讓我們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 語句之外的其他語句以不同方式操作表。
例如,我們可以使用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 |
讓我們對這些數據做一些分析。我們可以使用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 |
讓我們對這些數據做一些不同的分析。我們可以使用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語句怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。