case when的使用【sql深入學習】

    最近接手的項目中需要對集體表中的男女人數做一個統計,原來的實現是通過兩個查詢語句做到的——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;
--結果:


3.用一個sql語句完成不同條件的分組

--表結構:


--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對查詢不同類別的數據會給我們提供很大的幫助,也確確實實會減少很多的消耗,提高響應速度!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章