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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值