SQL中的CASE使用方法

2021-05-22 08:25:31 字數 4281 閱讀 7290

case具有兩種格式。簡單case函式和case搜尋函式。

--簡單case函式

case

***when'1

'then'男

'when'2

'then'女

'else'其他

'end

--case搜尋函式

case

when

*** ='

1'then'男

'when

*** ='

2'then'女

'else'其他

'end

這兩種方式,可以實現相同的功能。簡單case函式的寫法相對比較簡潔,但是和case搜尋函式相比,功能方面會有些限制,比如寫判斷式。

還有乙個需要注意的問題,case函式只返回第乙個符合條件的值,剩下的case部分將會被自動忽略。

--比如說,下面這段sql,你永遠無法得到「第二類」這個結果

case

when

col_1

in( 'a

', 'b

') then

'第一類

'when

col_1 in(

'a')      

then

'第二類

'else'其他

'end

下面我們來看一下,使用case函式都能做些什麼事情。

一,已知資料按照另外一種方式進行分組,分析。

有如下資料:(為了看得更清楚,我並沒有使用國家**,而是直接用國家名作為primary

key)

國家(country)    人口(population)

中國   

600美國   

100加拿大   

100英國   

200法國   

300日本   

250德國   

200墨西哥   

50印度   

250根據這個國家人口資料,統計亞洲和北美洲的人口數量。應該得到下面這個結果。

洲    人口

亞洲   

1100

北美洲   

250其他   

700想要解決這個問題,你會怎麼做?生成乙個帶有洲code的view,是乙個解決方法,但是這樣很難動態的改變統計的方式。

如果使用case函式,sql**如下:

select

sum(population),

case

country

when'中國

'then'亞洲

'when'印度

'then'亞洲

'when'日本

'then'亞洲

'when'美國

'then

'北美洲

'when

'加拿大

'then

'北美洲

'when

'墨西哥

'then

'北美洲

'else'其他

'end

from

table_a

group

bycase

country

when'中國

'then'亞洲

'when'印度

'then'亞洲

'when'日本

'then'亞洲

'when'美國

'then

'北美洲

'when

'加拿大

'then

'北美洲

'when

'墨西哥

'then

'北美洲

'else'其他

'end

;同樣的,我們也可以用這個方法來判斷工資的等級,並統計每一等級的人數。sql**如下;

select

case

when

salary

<=

500then'1

'when

salary

>

500and

salary

<=

600then'2

'when

salary

>

600and

salary

<=

800then'3

'when

salary

>

800and

salary

<=

1000

then'4

'else

null

endsalary_class,

count(*

)from

table_a

group

bycase

when

salary

<=

500then'1

'when

salary

>

500and

salary

<=

600then'2

'when

salary

>

600and

salary

<=

800then'3

'when

salary

>

800and

salary

<=

1000

then'4

'else

null

end;

二,用乙個sql語句完成不同條件的分組。

有如下資料

國家(country)    性別(***)    人口(population)

中國   

1340

中國   

2260

美國    145

美國    255

加拿大    151

加拿大    249

英國    140

英國    260

按照國家和性別進行分組,得出結果如下

國家    男    女

中國   

340260

美國   

4555

加拿大   

5149

英國   

4060

普通情況下,用union也可以實現用一條語句進行查詢。但是那樣增加消耗(兩個select部分),而且sql語句會比較長。

下面是乙個是用case函式來完成這個功能的例子

select

country,

sum(

case

when

*** ='

1'then

population

else

0end

), 

--男性人口

sum(

case

when

*** ='

2'then

population

else

0end

)  

--女性人口

from

table_a

group

bycountry;

這樣我們使用select,完成對二維表的輸出形式,充分顯示了case函式的強大。

三,在check中使用case函式。

在check中使用case函式在很多情況下都是非常不錯的解決方法。可能有很多人根本就不用check,那麼我建議你在看過下面的例子之後也嘗試一下在sql中使用check。

下面我們來舉個例子

公司a,這個公司有個規定,女職員的工資必須高於1000塊。如果用check和case來表現的話,如下所示

constraint

check_salary

check

( case

when

*** ='

2'then

case

when

salary

>

1000

then

1else

0end

else

1end=1

)如果單純使用check,如下所示

constraint

check_salary

check

( *** ='

2'andsalary

>

1000

)女職員的條件倒是符合了,男職員就無法輸入了。

SQL中的CASE使用方法

case具有兩種格式。簡單case函式和case搜尋函式。簡單case函式 case when 1 then 男 when 2 then 女 else 其他 end case搜尋函式 case when 1 then 男 when 2 then 女 else 其他 end 這兩種方式,可以實現相同的...

SQL中Case的使用方法

二,用乙個sql語句完成不同條件的分組。有如下資料 國家 country 性別 人口 population 中國1 340中國 2260美國1 45美國255 加拿大1 51加拿大249 英國140英國260 按照國家和性別進行分組,得出結果如下 國家男 女中國340260 美國45 55加拿大 5...

SQL中的CASE使用方法

case具有兩種格式。簡單case函式和case搜尋函式。簡單case函式 case when 1 then 男 when 2 then 女 else 其他 end case搜尋函式 case when 1 then 男 when 2 then 女 else 其他 end 這兩種方式,可以實現相同的...