今天的前言没什么好说的,你在开发中见过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语句是什么样子的,然后和我给出的进行对比,看看那个好些。)
------------------------------------------------------------------答题开始-----------------------------------------------------------------------------------
------------------------------------------------------------------答题结束-----------------------------------------------------------------------------------
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
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 的用法
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 '其他' END2.两者主要的区别
简单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的使用方法,如果觉得还不熟练,就赶紧多写几个例子吧!我们在实际开发中,不能仅仅止步写出sql,还要考虑如何写出性能和效率的sql,所以sql优化和性能测试,应该时刻去关注和学习,sql优化好了在面试中还能帮你很大的忙。
我是阿达,一名喜欢分享知识的程序员,时不时的也会荒腔走板的聊一聊电影、电视剧、音乐、漫画,这里已经有382位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言!