mysql:關於case-when的使用

mysql中關於case-when的三種使用場景

在數據庫中,case when常用來做條件判斷,在一些場景下十分方便。

開始之前

數據準備:參加某一次競賽時的學生成績,sex代表性別(1爲男0爲女),subject代表學科,score代表分數。張三屬於一班,王紅屬於二班,周浩屬於三班

在這裏插入圖片描述

第一種:已知數據按照另外一種方式進行分組,聚合

設想這樣一個場景:我想知道每個班總分是多少;代碼在下面給出

SELECT SUM(score),
(case name
	when '張三' THEN '一班'
	when '王紅' THEN '二班'
	ELSE '三班'
END) class
from student_score
GROUP BY 
case name
	when '張三' THEN '一班'
	when '王紅' THEN '二班'
	ELSE '三班'
END;

結果:

在這裏插入圖片描述
上面sql的意思就是:將張三認爲是一班的人,王紅認爲是二班的人,其他的(剩餘周浩)認爲是三班的人,然後按照這個分法分組求和,得到了想要的結果。

第二種:用一個SQL語句完成不同條件的分組。

設想這樣一個場景:我想知道每個學科男生女生分別得到多少分;代碼在下面給出

SELECT `subject`,
SUM(CASE WHEN sex = 1 THEN score ELSE 0 END) male,
SUM(CASE WHEN sex = 0 THEN score ELSE 0 END) female
FROM student_score
GROUP BY `subject`;

結果:

在這裏插入圖片描述

上面sql的意思就是:按照學科分組聚合時,male一列表示sex爲1則score保持不變,sex爲0時則score爲0;
female一列與male一列代表的意義相反,sex爲0則score保持不變,sex爲1時則score爲0.

第三種:根據條件有選擇的UPDATE

設想這樣一個場景:我想對每一項分數,依據是大於80的分數減10,小於70的分數加5,其他的部分不變;代碼在下面給出

UPDATE student_score set 
score = (
CASE WHEN score > 80 then score - 10
	WHEN score <70 THEN score + 5
	ELSE score
END);

上面sql的意思就是:按照條件來判斷每一條數據,然後更新.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章