文章出處

case 函數是聚合函數的一種,為統計函數。

case表達式:

CASE  selector
   WHEN value1 THEN action1;
   WHEN value2 THEN action2;
   WHEN value3 THEN action3


一、CASE WHEN 表達式有兩種形式

(1)簡單Case函數 

CASE  sex 
WHEN '1' THEN '男' 
WHEN '2' THEN '女' 
ELSE '其他' END 

 

 (2)Case搜索函數

CASE
WHEN sex = '1' THEN '男' 
WHEN sex = '2' THEN '女' 
ELSE '其他' END 

 

 二、CASE WHEN 應用

學生性別統計student表:

image

 

------------查詢表中所有的性別

select  ID,
     (case sex 
     when '1' then '男'
     when '2' then '女'   
     ELSE 'null'
     END) AS  '性別',
     province as '省份'
from `student`   ORDER BY `ID` ASC ;

 

查詢結果如下:

image

 

-------------查詢江蘇省與浙江省男生與女生個數分別是多少。

image

第一種計算方法:以省份區分

select province AS '江蘇省',
COUNT(case sex 
              when '男' THEN  '男' 
              ELSE  null END ) AS  '男生',
COUNT(case sex 
              when '女' THEN  '女' 
              ELSE  null END ) AS  '女生'
from `student`  where `province` ='江蘇'

UNION 

select province AS '江蘇省',
COUNT(case sex 
              when '男' THEN  '男' 
              ELSE  null END ) AS  '男生',
COUNT(case sex 
              when '女' THEN  '女' 
              ELSE  null END ) AS  '女生'
from `student`  where `province` ='浙江'

 

查詢結果如下:

image

 

第二種計算:以性別區分

select sex,
        COUNT(case province
              when '江蘇' THEN  '江蘇' 
              ELSE  null END ) AS  '江蘇省',

        COUNT(case province 
              when '浙江' THEN  '浙江' 
              ELSE  null END ) AS  '浙江省'
from  `student` group by  `sex` ;

 

查詢結果如下:

image     

注意:

COUNT(case province
              when '江蘇' THEN  '江蘇'
              ELSE  null END ) AS  '江蘇省',

可以簡寫成:

COUNT( case province  when '江蘇' THEN  '江蘇'    END ) AS  '江蘇省'

 

----------查詢各省份的男女數量

select province ,
           sex,
            COUNT(*) AS  '總數'
from `student` GROUP BY province ,sex

 

查詢結果如下:

image

 

----------只統計了浙江省的男女數目

select 
     sex ,
     province, 
     count(case province when '江蘇' then '江蘇' end )as '數量' 
from student group by province, sex;

 

查詢結果如下:

image

當數據較多時,使用以上數據查詢占用大量的資源,因此可以簡單寫成以下形式:

select 
     sex as '性別' ,
     count(case province when '江蘇' then '江蘇' end )as '浙江省' 
from student group by sex;

 

查詢結果如下:

image

 

補充:

(1)

select (case province

             when '浙江' then '浙江' 

             when '江蘇' then '江蘇' 

             else province end  ) as 省份 from student;

 

else province 默認為除浙江、江蘇 外顯示其他城市

image

(2) case when  可以跟不相等的判斷。

          可用于=,>=,<,<=,<>,is null,is not null 等的判斷。

如:

image

 

三、CASE WHEN 與 DECODE 比較

1,DECODE  Oracle 特有;
2,CASE WHEN  Oracle ,  SQL Server,  MySQL 都可用;
3,DECODE 只能用做相等判斷,但是可以配合sign函數進行大于,小于,等于的判斷,

       CASE  可用于=,>=,<,<=,<>,is null,is not null 等的判斷;

4,DECODE 使用其來比較簡潔,CASE 雖然復雜但更為靈活;


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()