select case when的一些用法

2022-08-31 05:15:10 字數 2561 閱讀 8170

概述: 

sql語句中的case語句與高階語言中的switch語句,是標準sql的語法,適用於乙個條件判斷有多

種值的情況下分別執行不同的操作。

首先,讓我們看一下case的語法。在一般的select中,其語法格式如下:

select =

case 《單值表示式》

when 《表示式值》 then 例子(引用): 

第一組: 查詢dj_zt表狀態為'07'或'11'、qylx_dm = '03'的所有記錄數。

a:用case語句

select count(case a.zt when '07' then a.bs end)+

count(case a.zt when '11' then a.bs end)

from dj_zt a

where a.qylx_dm = '03'

----------------

11829

b:不用case語句

select count(*)

from dj_zt a

where a.qylx_dm = '03'

and a.zt in ('07', '11')

----------------

11829 

結果:a、b兩組耗費的代價一樣的,相比b的寫法簡潔,平局。

第二組: 分別查詢dj_zt表狀態為'07'和'11'且qylx_dm = '03'的所有記錄數。

a:用case語句

select count(case a.zt when '07' then a.bs end),

count(case a.zt when '11' then a.bs end)

from dj_zt a

where a.qylx_dm = '03

----------------

4565 7264

b:不用case語句(寫了兩條語句,掃瞄表兩遍,效率明顯低下)

select count(*)

from dj_zt a

where a.qylx_dm = '03'

and a.zt='07'

----------------

4565 

select count(*)

from dj_zt a

where a.qylx_dm = '03'

and a.zt='11'

----------------

7264

結果:b組代價明顯高出a組很多,執行的效率比較低。

case和if的區別: 

在高階語言中,case的可以用if來替代,但是在sql中不行。

case是sql標準定義的,if是資料庫系統的擴充套件。

case可以用於sql語句和sql儲存過程、觸發器,if只能用於儲存過程和觸發器。

在sql過程和觸發器中,用if替代case代價都相當的高,相當的麻煩,難以實現。

總結: 通過上面兩組例項可以看出,應用case語句可以讓sql變得簡潔高效,從而大大提高了執行效率。而且,case的使用一般不會引起效能(相比沒有用case的語句)低下,反而增加了操作的靈活性

select atid,userid,title,releasedate,forumid,clicks,istoday = (

case convert(varchar(10), releasedate,120) 

when convert(varchar(10), getdate(),120) 

then releasedate 

end),bbssettop from tab_articletopics where forumid<>0 and status in(1,5) 

order by bbssettop desc, istoday desc,clicks desc

****************************************===

有一張表,裡面有3個字段:語文,數學,英語。其中有3條記錄分別表示語文70分,數學80分,英語58分,請用一條sql語句查詢出這三條記錄並按以下條件顯示出來(並寫出您的思路): 

大於或等於80表示優秀,大於或等於60表示及格,小於60分表示不及格。 

顯示格式: 

語文              數學                英語 

及格              優秀                不及格    

------------------------------------------ 

select 

(case when 語文》=80 then '優秀' 

when 語文》=60 then '及格' 

else '不及格') as 語文, 

(case when 數學》=80 then '優秀' 

when 數學》=60 then '及格' 

else '不及格') as 數學, 

(case when 英語》=80 then '優秀' 

when 英語》=60 then '及格' 

else '不及格') as 英語, 

from table

container of 的的的原理

另外一篇,同樣精彩,揭開linux核心中container of的神秘面紗 華清遠見嵌入式學院講師。在linux 核心中有乙個大名鼎鼎的巨集container of 這個巨集是用來幹嘛的呢?我們先來看看它在核心中是怎樣定義的。呵呵,乍一看不知道是什麼東東。我們先來分析一下container of p...

存在的就是合理的,發生的即是必然的。

筆者有時候會想,什麼是對,什麼是錯?對於追求某一件事情之前首先會考慮,為什麼我要做這件事情。所以經過自我分析和生活周邊環境的總結。我認為,對於乙個人來,這是在站在個體的角度上說。什麼是對的?就是你自己覺得是對的,它就是對的。不過這個只是你自己的想法。主觀上的正確,不代表客觀上也受到了別人的認可。就拿...

Apache的rewrite的重寫相關的引數

apache mod rewrite規則重寫的標誌一覽 使用mod rewrite時常用的伺服器變數 rewriterule規則表示式的說明 匹配任何單字元 chars 匹配字串 chars chars 不匹配字串 chars text1 text2 可選擇的字串 text1或text2 匹配0到1...