前言:

今天的前言没什么好说的,你在开发中见过case-when-then else end 那你就知道某些场景很好用,没见过的很可能很多时候你会用连表查的方式解决类似的问题。这篇文章就告诉大家case when 的一些基础用法,让大家感受下它的好用之处。

正文:

一、我们先举个例子

1.建表语句

-- 班级表
CREATE TABLE example(
	id VARCHAR(20),
  name VARCHAR(20),
  birthday VARCHAR(20),
	sex VARCHAR(3),
  grade VARCHAR(20)
);

2.插入数据的语句

INSERT INTO `example` VALUES ('1', '小明', '1998-08-09', '1', '一年级');
INSERT INTO `example` VALUES ('2', '小红', '1998-08-09', '2', '一年级');
INSERT INTO `example` VALUES ('3', '小亮', '1998-08-09', '1', '一年级');
INSERT INTO `example` VALUES ('4', '小华', '1998-08-09', '1', '一年级');
INSERT INTO `example` VALUES ('5', '小陈', '1998-08-09', '1', '二年级');
INSERT INTO `example` VALUES ('6', '小达', '1998-08-09', '2', '二年级');
INSERT INTO `example` VALUES ('7', '小打', '1998-08-09', '1', '二年级');
INSERT INTO `example` VALUES ('8', '小哒', '1998-08-09', '2', '二年级');
INSERT INTO `example` VALUES ('9', '达达', '1998-08-09', '2', '二年级');

 3.业务场景:要求按每个年级统计男生和女生的数量各是多少,统计结果的表头为,年级,男生数量,女生数量。(大家可以先不看后面的思路,自己写写,看看写出的sql语句是什么样子的,然后和我给出的进行对比,看看那个好些。)

------------------------------------------------------------------答题开始-----------------------------------------------------------------------------------

学会了条件判断语句case when,能帮你省很多事情!_开发问题

 ------------------------------------------------------------------答题结束-----------------------------------------------------------------------------------

4.我先公布第一种答案,看看和大家的是否相同或思路类似

SELECT
	a.grade AS 年级,
	a.男生数量,
	c.女生数量
FROM
	(
		SELECT
			a1.grade,
			count(*) AS 男生数量
		FROM
			example AS a1
		WHERE
			a1.sex = '1'
		GROUP BY
			a1.grade
	) AS a
LEFT JOIN (
	SELECT
		a2.grade,
		count(*) AS 女生数量
	FROM
		example AS a2
	WHERE
		a2.sex = '2'
	GROUP BY
		a2.grade
) AS c ON a.grade = c.grade

学会了条件判断语句case when,能帮你省很多事情!_开发问题_02 

 5.公布case when写法的答案

SELECT
	grade as 年级,
	COUNT(
		CASE
		WHEN sex = 1 THEN
			1
		ELSE
			NULL
		END
	) 男生数量,
	COUNT(
		CASE
		WHEN sex = 2 THEN
			1
		ELSE
			NULL
		END
	) 女生数量
FROM
	example
GROUP BY
	grade;

学会了条件判断语句case when,能帮你省很多事情!_开发问题_02 

二、讲解条件判断语句case when 的用法

1.case when具有两种个格式

--简单Case函数
case 字段 when 值 then 返回值 when 值2 then 返回值2 end
--举例
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END

--Case搜索函数
case when 条件1 then 返回值1 when 条件2 then 返回值2 end
--举例
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

2.两者主要的区别

简单case函数的写法相对比较简洁,但是和 case搜索函数相比,功能方面会有些限制,没有搜索函数再写条件的时候更加灵活。

3.case when的用法

Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。Case when 相当于一个自定义的数据透视表,group by 是行名,case when 负责列名。

4.举个小例子

建表语句

-- 国家人口性别表
CREATE TABLE shiyan(
	country_name VARCHAR(20),
  s_sex VARCHAR(20),
	population VARCHAR(20)
);

插入数据语句

INSERT INTO `shiyan` VALUES ('中国', '1', '340');
INSERT INTO `shiyan` VALUES ('中国', '2', '260');
INSERT INTO `shiyan` VALUES ('美国', '1', '45');
INSERT INTO `shiyan` VALUES ('美国', '2', '55');
INSERT INTO `shiyan` VALUES ('加拿大', '1', '51');
INSERT INTO `shiyan` VALUES ('加拿大', '2', '49');
INSERT INTO `shiyan` VALUES ('英国', '1', '40');
INSERT INTO `shiyan` VALUES ('英国', '2', '60');

 业务场景:按照国家和性别进行分组,sql语句

select a.country_name,
sum(case WHEN a.s_sex ='1' THEN a.population else 0 END )as 男,
sum(case WHEN a.s_sex ='2' THEN a.population else 0 END) as 女
FROM shiyan as a
GROUP BY
a.country_name

执行结果:

 学会了条件判断语句case when,能帮你省很多事情!_开发问题_04

总结:

希望大家通过上面的例子可以初步了解case when的使用方法,如果觉得还不熟练,就赶紧多写几个例子吧!我们在实际开发中,不能仅仅止步写出sql,还要考虑如何写出性能和效率的sql,所以sql优化和性能测试,应该时刻去关注和学习,sql优化好了在面试中还能帮你很大的忙。

我是阿达,一名喜欢分享知识的程序员,时不时的也会荒腔走板的聊一聊电影、电视剧、音乐、漫画,这里已经有382位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言!