例項演示:
(1)查詢表users中的資料。
select u.id,u.realname,u.*** from users u;
查詢結果如下
id realname ***
1 10082 松xx
2 10084 林xx 1
3 10087 西xx
4 10100 胡xx
5 10102 龍xx 1
......
(2)上表結果中的"***"是用**表示的,希望將**用中文表示。可在語句中使用case語句。
select u.id,u.realname,u.***,
( case u.***
when 1 then '男'
when 2 then '女'
else '空的'
end) 性別
from users u;
查詢結果
id realname *** 性別
1 10082 松xx 空的
2 10084 林xx 1 男
3 10087 西xx 空的
4 10100 胡xx 空的
5 10102 龍xx 1 男
......
如果不希望列表中出現"***"列,語句如下
select u.id,u.realname,
( case u.***
when 1 then '男'
when 2 then '女'
else '空的'
end) 性別
from users u;
(3)將sum與case結合使用,可以實現分段統計。
例如現在我希望將上表中各種性別的人數進行統計,sql語句如下
select
sum( case u.*** when 1 then 1 else 0 end) 男性,
sum( case u.*** when 2 then 1 else 0 end) 女性,
sum( case when u.***<>1 and u.***<>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.*** when 1 then 1 else 0 end) 男性,
sum( case u.*** when 2 then 1 else 0 end) 女性,
sum( case when u.***<>1 and u.***<>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級統計;如果有多個分組字段,應該可以實現多級統計了。如有居民統計表,儲存了人口資訊、人口所在市、區、街道資訊等,欲統計深圳市的人口資料,實現統計如下統計結果的話,就可以通過多級分組實現。
區劃 男性居民 女性居民
深圳市
南山區
粵海
科技
寶安區
新安
(5)case when的語法
case
when then
whenthen
else
end
Oracle中case when的用法
最早接觸case when是在行列轉的時候,資料庫中最難的就是各種的查詢,此次的業務需要匯出excel,匯出的內容包含了很多的字段,各種聯合查詢,還有需要計算 分組聯合等。歷經整整一下午終於以近兩百行結束了這個業務。特記錄對於case when的用法,歡迎各位朋友指正,不喜勿噴。首先case whe...
Oracle中的case when的使用
今天要用sql實現乙個小小的邏輯,總之呢,需要用到一些判斷條件,所以準備使用一下 case when的用法,但是由於之前只寫過case when else end單條語句,沒有寫過巢狀,而且 感覺sql寫起來也不好除錯,所以在網上找了下資料。第一步,先寫乙個簡單的巢狀測試一下 select case...
Oracle中case when語句的用法
case when語法 case whenthen whenthen else endcase when else語法要點說明如下 1 以case開頭,以end結尾 2 分支中when 後跟條件,then為顯示結果 3 else 為除此之外的預設情況,類似於高階語言程式中switch case的de...