sql中case when的用法

sql中case when的用法

sql中case when的用法

case具有兩種格式。簡(jiǎn)單case函數(shù)和case搜索函數(shù)。

1、簡(jiǎn)單case函數(shù)

case?sex ??when?'1'?then?'男' ??when?'2'?then?'女’ ??else?'其他'?end

2、case搜索函數(shù)

case?when?sex?=?'1'?then?'男' ?????when?sex?=?'2'?then?'女' ?????else?'其他'?end

這兩種方式,可以實(shí)現(xiàn)相同的功能。簡(jiǎn)單case函數(shù)的寫法相對(duì)比較簡(jiǎn)潔,但是和case搜索函數(shù)相比,功能方面會(huì)有些限制,比如寫判定式。(免費(fèi)學(xué)習(xí)視頻教程推薦:mysql視頻教程

還有一個(gè)需要注重的問題,case函數(shù)只返回第一個(gè)符合條件的值,剩下的case部分將會(huì)被自動(dòng)忽略。

比如說,下面這段sql,你永遠(yuǎn)無(wú)法得到“第二類”這個(gè)結(jié)果

case?when?col_1?in?('a','b')?then?'第一類' ?????when?col_1?in?('a')?then?'第二類' ?????else?'其他'?end

實(shí)例演示:

首先創(chuàng)建一張users表,其中包含id,name,sex三個(gè)字段,表內(nèi)容如下:

select?*?from?users ? ?ID????????NAME?????????????????SEX ----------?--------------------?---------- 1??????????張一????????????????? 2??????????張二?????????????????1 3?????????張三????????????????? 4??????????張四???????????????? 5??????????張五?????????????????2 6??????????張六?????????????????1 7??????????張七?????????????????2 8??????????張八?????????????????1

1、上表結(jié)果中的”sex”是用代碼表示的,希望將代碼用中文表示。可在語(yǔ)句中使用case語(yǔ)句:

select?u.id,u.name,u.sex, ???(case?u.sex ??????when?1?then?'男' ??????when?2?then?'女' ??????else?'空的' ??????end ?????)性別 ??from?users?u; ????????????????????????????????????ID?NAME????????????????????????SEX?性別 ---------------------------------------?--------------------?----------?------ ??????????????????????????????????????1?張一????????????????????????????空的 ??????????????????????????????????????2?張二??????????????????????????1?男 ??????????????????????????????????????3?張三????????????????????????????空的 ??????????????????????????????????????4?張四????????????????????????????空的 ??????????????????????????????????????5?張五??????????????????????????2?女 ??????????????????????????????????????6?張六??????????????????????????1?男 ??????????????????????????????????????7?張七??????????????????????????2?女 ??????????????????????????????????????8?張八??????????????????????????1?男

?2、如果不希望列表中出現(xiàn)”sex”列,語(yǔ)句如下:

select?u.id,u.name, ????(case?u.sex ??????when?1?then?'男' ??????when?2?then?'女' ??????else?'空的' ??????end ????)性別 ??from?users?u; ? ?????????????????????????????????????ID?NAME?????????????????性別 ---------------------------------------?--------------------?------ ??????????????????????????????????????1?張一?????????????????空的 ??????????????????????????????????????2?張二?????????????????男 ??????????????????????????????????????3?張三?????????????????空的 ??????????????????????????????????????4?張四?????????????????空的 ??????????????????????????????????????5?張五?????????????????女 ??????????????????????????????????????6?張六?????????????????男 ??????????????????????????????????????7?張七?????????????????女 ??????????????????????????????????????8?張八?????????????????男

3、將sum與case結(jié)合使用,可以實(shí)現(xiàn)分段統(tǒng)計(jì)。

如果現(xiàn)在希望將上表中各種性別的人數(shù)進(jìn)行統(tǒng)計(jì),sql語(yǔ)句如下:

select ????sum(case?u.sex?when?1?then?1?else?0?end)男性, ????sum(case?u.sex?when?2?then?1?else?0?end)女性, ????sum(case?when?u.sex?1?and?u.sex2?then?1?else?0?end)性別為空 ??from?users?u; ? ????????男性?????????女性???????性別為空 ----------?----------?---------- ?????????3??????????2??????????0 ? -------------------------------------------------------------------------------- SQL>?select ????count(case?when?u.sex=1?then?1?end)男性, ????count(case?when?u.sex=2?then?1?end)女, ????count(case?when?u.sex?1?and?u.sex2?then?1?end)性別為空 ??from?users?u; ? ????????男性??????????女???????性別為空 ----------?----------?---------- ?????????3??????????2??????????0

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊9 分享