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的意思就是:按照條件來判斷每一條數據,然後更新.