case 函數是聚合函數的一種,爲統計函數。mysql
case表達式:sql
CASE selector WHEN value1 THEN action1; WHEN value2 THEN action2; WHEN value3 THEN action3
1、CASE WHEN 表達式有兩種形式oracle
(1)簡單Case函數
ide
CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其餘' END
(2)Case搜索函數 函數
CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其餘' END
本篇文章未講解關於case 搜索函數用法。ui
2、CASE WHEN 應用spa
學生性別統計student表:.net
------------查詢表中全部的性別blog
select ID, (case sex when '1' then '男' when '2' then '女' ELSE 'null' END) AS '性別', province as '省份' from `student` ORDER BY `ID` ASC ;
查詢結果以下:資源
-------------查詢江蘇省與浙江省男生與女生個數分別是多少。
第一種計算方法:以省份區分
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` ='浙江'
查詢結果以下:
第二種計算:以性別區分
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` ;
查詢結果以下:
注意:
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;
查詢結果以下:
----------只統計了浙江省的男女數目
select sex , province, count(case province when '江蘇' then '江蘇' end )as '數量' from student group by province, sex;
查詢結果以下:
當數據較多時,使用以上數據查詢佔用大量的資源,所以能夠簡單寫成如下形式:
select sex as '性別' , count(case province when '江蘇' then '江蘇' end )as '浙江省' from student group by sex;
查詢結果以下:
補充:
(1)select (case province when '浙江' then '浙江' when '江蘇' then '江蘇' else province end ) as 省份 from student;
else province 默認爲除浙江、江蘇 外顯示其餘城市
(2) case when 能夠跟不相等的判斷。
可用於=,>=,<,<=,<>,is null,is not null 等的判斷。
如:
3、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 雖然複雜但更爲靈活;