case when的語法:
CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END
示例:
(1)查詢表users中的數據。
select u.id,u.realname,U.SEX from users u;
查詢結果如下
ID REALNAME SEX
1 10082 鬆XX
2 10084 林XX 1
3 10087 西XX
4 10100 胡XX
5 10102 龍XX 1
......查詢結果
ID REALNAME SEX 性別
1 10082 鬆XX 空的
2 10084 林XX 1 男
3 10087 西XX 空的
4 10100 胡XX 空的
5 10102 龍XX 1 男
......
如果不希望列表中出現"sex"列,語句如下
select u.id,u.realname,
( case u.sex
when 1 then '男'
when 2 then
'女'
else '空的'
END
) 性別
from users u;
(2)上表結果中的"sex"是用代碼表示的,希望將代碼用中文表示。可在語句中使用CASE語句。
select u.id,u.realname,U.SEX,
( case u.sex
when 1 then '男'
when 2 then '女'
else '空的'
END
) 性別
from users
u;
(3)將sum與case結合使用,可以實現分段統計。
例如現在我希望將上表中各種性別的人數進行統計,sql語句如下
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.sex<>2 then 1 else 0 end) 性別爲空
from users
u;
執行結果如下
男性 女性 性別爲空
1 41 15 0
如果學校內有數千名學生進行了考試,想統計60分以下、60-80分、80-100分的總人數,就可以使用這樣的語句來實現。只是條件不同而已。
(4)如果sum、case when結合group by使用,可以進行分組分段統計。
如,我希望統計users表中每個創建者創建的男性、女性、無性別的用戶總數(數據表中有一個字段creator_id,表示創建者的ID),語句如下
select u.creator_id 創建者ID,
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.sex<>2 then 1 else 0 end) 性別爲空
from users
u
group by u.creator_id
查詢結果如下
創建者ID 男性 女性 性別爲空
1 0 0 0
2 10000 35 12 0
3 11100 0 0 0
4 11060 0 0 0
5 11040 0 0 0
6 11080 2 0 0
7 10281 3 3 0
8 10580 1 0 0
上例中只有一個分組字段,實現了1級統計;如果有多個分組字段,應該可以實現多級統計了。如有居民統計表,保存了人口信息、人口所在市、區、街道信息等,欲統計深圳市的人口數據,實現統計如下統計結果的話,就可以通過多級分組實現。
區劃 男性居民 女性居民
深圳市
南山區
粵海
科技
寶安區
新安