最近接手的項目中需要對集體表中的男女人數做一個統計,原來的實現是通過兩個查詢語句做到的——SELECT * FROM student WHERE sex='男',同樣也可以查詢到查詢到所有女生人數和總人數,暫且不說這樣會多少次連接數據庫造成資源的消耗和時間的浪費,就是前臺的拼接數據也得費不少腦細胞吧,況且這麼low的辦法,肯定是有更加高效的方式的!
那麼就有了case when的用武之地,case when使這一業務性能上有了巨大優化,下面就見分曉!
業務背景:
需要查詢得到表中男生和女生各自的人數總和以及所有的人數;
表結構:
實現語句:
SELECT
COUNT(*) AS number,
SUM(
CASE sex
WHEN '男' THEN
1
ELSE
0
END
) AS male,
SUM(
CASE sex
WHEN '女' THEN
1
ELSE
0
END
) AS female
FROM
student
結果:
☆拓展:
1.已知數據按另一種方式分組、分析
--表結構:
--實現語句:
SELECT
SUM(population),
CASE country
WHEN '中國' THEN
'亞洲'
WHEN '印度' THEN
'亞洲'
WHEN '日本' THEN
'亞洲'
WHEN '美國' THEN
'北美洲'
WHEN '加拿大' THEN
'北美洲'
WHEN '墨西哥' THEN
'北美洲'
ELSE
'其他'
END
FROM
country
GROUP BY
CASE country
WHEN '中國' THEN
'亞洲'
WHEN '印度' THEN
'亞洲'
WHEN '日本' THEN
'亞洲'
WHEN '美國' THEN
'北美洲'
WHEN '加拿大' THEN
'北美洲'
WHEN '墨西哥' THEN
'北美洲'
ELSE
'其他'
END;
--結果:
2.還有常見的對員工的工資按等級劃分;
--表結構:
--sql語句:
SELECT
CASE
WHEN salary <= 2000 THEN
'一'
WHEN salary > 2000
AND salary <= 4000 THEN
'二'
WHEN salary > 4000
AND salary <= 6000 THEN
'三'
WHEN salary > 6000
AND salary <= 8000 THEN
'四'
ELSE
'其他'
END salary_class,
COUNT(*)
FROM
salary
GROUP BY
CASE
WHEN salary <= 2000 THEN
'一'
WHEN salary > 2000
AND salary <= 4000 THEN
'二'
WHEN salary > 4000
AND salary <= 6000 THEN
'三'
WHEN salary > 6000
AND salary <= 8000 THEN
'四'
ELSE
'其他'
END;
--結果:
--表結構:
--sql語句:
SELECT
country,
SUM(
CASE
WHEN sex = '男' THEN
population
ELSE
0
END
) AS maleNo,
SUM(
CASE
WHEN sex = '女' THEN
population
ELSE
0
END
) AS femaleNo
FROM
population
GROUP BY
country
--結果:
4.check中使用case
總之,case when對查詢不同類別的數據會給我們提供很大的幫助,也確確實實會減少很多的消耗,提高響應速度!