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 這兩種方式,可以實現相同的...