case?when?then?else?end語(yǔ)句的用法(附demo)
case具有兩種格式。簡(jiǎn)單case函數(shù)和case搜索函數(shù)。
- case :表示需要處理的字段
- when :表示條件
- then :表示當(dāng)when執(zhí)行為true時(shí),再執(zhí)行的語(yǔ)句
- else :表示當(dāng)所有的when執(zhí)行為false時(shí),再執(zhí)行的語(yǔ)句
- end:表示 case 語(yǔ)句結(jié)束的結(jié)尾
--簡(jiǎn)單case函數(shù)
case sex when '1' then '男' when '2' then '女' else '其他' end
--case搜索函數(shù)--經(jīng)常用的是這個(gè)
case when sex = '1' then '男' when sex = '2' then '女' else '其他' end
這兩種方式,可以實(shí)現(xiàn)相同的功能。簡(jiǎn)單case函數(shù)的寫法相對(duì)比較簡(jiǎn)潔,但是和case搜索函數(shù)相比,功能方面會(huì)有些限制,比如寫判定式。
還有一個(gè)需要注重的問(wèn)題,case函數(shù)只返回第一個(gè)符合條件的值,剩下的case部分將會(huì)被自動(dòng)忽略。
--比如說(shuō),下面這段sql,你永遠(yuǎn)無(wú)法得到“第二類”這個(gè)結(jié)果
case when col_1 in ( 'a', 'b') then'第一類'
when col_1 in ('a') then '第二類'
else '其他' end這是原始表:

例子一:看下select函數(shù)加case函數(shù)和不加case函數(shù)的區(qū)別
不加case函數(shù)的,SELECT id,name,core,sex FROM student a ;

加case函數(shù)的,SELECT (CASE WHEN a.`name`='張三' THEN a.core ELSE 0 END) AS '張三' , id,name,core,sex FROM student a ;

可以看到,加了case函數(shù)的就是自己?jiǎn)为?dú)成一列,就是比不加多了一列數(shù)據(jù),它并不會(huì)改變行的數(shù)量.
例子二: 介紹下case函數(shù)的執(zhí)行過(guò)程.
SELECT (CASE WHEN a.`name`='張三' THEN a.core ELSE 0 END) AS '張三' FROM student a ;
上面的執(zhí)行過(guò)程:
進(jìn)行匹配的是名字name,首先匹配第一行,name是等于張三,所以返回core也就是50
匹配第二行,name等于李四,不匹配,返回else的值也就是0
匹配第三行,name等于王五,不匹配,返回else的值也就是0
匹配第四行,name等于趙六,不匹配,返回else的值也就是0
所以得到結(jié)果:

例子三: 看下case函數(shù)后面加不加as的區(qū)別
先看下加as, SELECT (CASE WHEN a.`name`='張三' THEN a.core ELSE 0 END) AS '張三' FROM student a ;

然后是不加as, SELECT (CASE WHEN a.`name`='張三' THEN a.core ELSE 0 END) FROM student a ;

可以看到, 加as就是對(duì)生成的列取個(gè)別名, 不加as的話默認(rèn)的列名就是 case這整個(gè)標(biāo)簽.
例子四:一列里面多次條件匹配
SELECT (CASE WHEN a.`name`='張三' THEN a.core WHEN a.`name`='李四' THEN a.core END) AS '張三' FROM student a ;

執(zhí)行過(guò)程:第一行匹配張三成功,返回50,第二行匹配李四成功返回60,三四兩行不匹配返回null
例子五:多列的單條件匹配
SELECT (CASE WHEN a.`name`='張三' THEN a.core END) AS '張三',(CASE WHEN a.`name`='李四' THEN a.core END) AS '李四' FROM student a;

總結(jié)case語(yǔ)句能將行轉(zhuǎn)換成列
例子六:實(shí)戰(zhàn)一
有如下數(shù)據(jù):

根據(jù)這個(gè)國(guó)家人口數(shù)據(jù),統(tǒng)計(jì)亞洲和北美洲的人口數(shù)量。得到下面這個(gè)結(jié)果:

查詢sql:
select sum(population),
case country
when '中國(guó)' then'亞洲'
when '印度' then'亞洲'
when '日本' then'亞洲'
when '美國(guó)' then'北美洲'
when '加拿大' then'北美洲'
when '墨西哥' then'北美洲'
else '其他' end
from table_a
group by case country
when '中國(guó)' then'亞洲'
when '印度' then'亞洲'
when '日本' then'亞洲'
when '美國(guó)' then'北美洲'
when '加拿大' then'北美洲'
when '墨西哥' then'北美洲'
else '其他' end;例子七:實(shí)戰(zhàn)二
有如下數(shù)據(jù):

按照國(guó)家和性別進(jìn)行分組,得出結(jié)果如下:

查詢sql:
select country,
sum( case when sex = '1' then
population else 0 end), --男性人口
sum( case when sex = '2' then
population else 0 end) --女性人口
from table_a
group by country;到此這篇關(guān)于case when then else end語(yǔ)句的用法(附demo)的文章就介紹到這了,更多相關(guān)case when then else end內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sql查詢一個(gè)數(shù)組中是否包含某個(gè)內(nèi)容find_in_set問(wèn)題
這篇文章主要介紹了sql查詢一個(gè)數(shù)組中是否包含某個(gè)內(nèi)容find_in_set問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
sql server如何利用開窗函數(shù)over()進(jìn)行分組統(tǒng)計(jì)
這篇文章主要介紹了sql server利用開窗函數(shù)over()進(jìn)行分組統(tǒng)計(jì)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03
用SQL腳本讀取Excel中的sheet數(shù)量及名稱的方法代碼
這篇文章介紹了用SQL腳本讀取Excel中的sheet數(shù)量及名稱的方法代碼,有需要的朋友可以參考一下2013-09-09
SQL?Server中的PIVOT與UNPIVOT用法具體示例詳解
這篇文章主要給大家介紹了關(guān)于SQL?Server中的PIVOT與UNPIVOT用法的具體示例,SQL?Server中PIVOT和UNPIVOT運(yùn)算符用于行列轉(zhuǎn)換,適用于報(bào)表生成與數(shù)據(jù)清洗,需要的朋友可以參考下2025-05-05
SQL Server數(shù)據(jù)庫(kù)按百分比查詢出表中的記錄數(shù)
這篇文章主要介紹了SQL Server數(shù)據(jù)庫(kù)在一個(gè)表中按百分比查詢出記錄條數(shù)的方法及代碼示例,需要的朋友可以參考下2015-08-08
SQL Server 復(fù)制需要有實(shí)際的服務(wù)器名稱才能連接到服務(wù)器
今天在做sql Server 2005的實(shí)驗(yàn)的時(shí)候碰到的問(wèn)題,問(wèn)題描述很清楚,懷疑是我以前給計(jì)算機(jī)修改了名稱而導(dǎo)致的.可以用select @@servername和select serverproperty ('servername')對(duì)照一下,兩個(gè)的結(jié)果是否一樣2012-06-06
sqlserver數(shù)據(jù)庫(kù)導(dǎo)入方法的詳細(xì)圖文教程
導(dǎo)入數(shù)據(jù)也是數(shù)據(jù)庫(kù)操作中使用頻繁的功能,下面這篇文章主要給大家介紹了關(guān)于sqlserver數(shù)據(jù)庫(kù)導(dǎo)入方法的詳細(xì)圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10

