case when的使用【sql深刻学习】

    最近接手的项目中须要对集体表中的男女人数作一个统计,原来的实现是经过两个查询语句作到的——SELECT * FROM student WHERE sex='男',一样也能够查询到查询到全部女生人数和总人数,暂且不说这样会多少次链接数据库形成资源的消耗和时间的浪费,就是前台的拼接数据也得费很多脑细胞吧,何况这么low的办法,确定是有更加高效的方式的!
    那么就有了case when的用武之地,case when使这一业务性能上有了巨大优化,下面就见分晓!
业务背景:

    须要查询获得表中男生和女生各自的人数总和以及全部的人数;sql

表结构:数据库

 

实现语句:性能

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.已知数据按另外一种方式分组、分析spa

--表结构:code

   

--实现语句:xml

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;

--结果:blog

2.还有常见的对员工的工资按等级划分;

--表结构:资源


--sql语句:io

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对查询不一样类别的数据会给咱们提供很大的帮助,也确确实实会减小不少的消耗,提升响应速度!