case when的使用【sql深入学习】
2016-06-28 11:31
387 查看
最近接手的项目中需要对集体表中的男女人数做一个统计,原来的实现是通过两个查询语句做到的——SELECT * FROM student WHERE sex='男',同样也可以查询到查询到所有女生人数和总人数,暂且不说这样会多少次连接数据库造成资源的消耗和时间的浪费,就是前台的拼接数据也得费不少脑细胞吧,况且这么low的办法,肯定是有更加高效的方式的!
那么就有了case when的用武之地,case when使这一业务性能上有了巨大优化,下面就见分晓!
业务背景:
需要查询得到表中男生和女生各自的人数总和以及所有的人数;
表结构:
实现语句:
结果:
这样便一次拿到了所有的数据,减少了访问数据库的次数,降低了计算机的开销成本,由于数据量小,自己并没有做时间的检测,数据量一旦足够大肯定是会有明显的性能改善的!
☆拓展:
1.已知数据按另一种方式分组、分析
--表结构:
--实现语句:
--结果:
2.还有常见的对员工的工资按等级划分;
--表结构:
--sql语句:
3.用一个sql语句完成不同条件的分组
--表结构:
--sql语句:
--结果:
4.check中使用case
总之,case when对查询不同类别的数据会给我们提供很大的帮助,也确确实实会减少很多的消耗,提高响应速度!
那么就有了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对查询不同类别的数据会给我们提供很大的帮助,也确确实实会减少很多的消耗,提高响应速度!
相关文章推荐
- Ruby中case表达式详解
- mysql中IFNULL,IF,CASE的区别介绍
- 详解Mysql case then使用
- shell中case的用法学习笔记
- shell脚本中case条件控制语句的一个bug分析
- Shell脚本case语句简明教程
- linux shell流程控制语句实例讲解(if、for、while、case语句实例)
- MySQL中的if和case语句使用总结
- 一个shell for循环与case结合的脚本(监控程序状态)
- sql中case语句的用法浅谈
- c#中switch case的用法实例解析
- SqlServer使用 case when 解决多条件模糊查询问题
- SQL集合函数中case when then 使用技巧
- sql学习之CASE WHEN THEN ELSE END的用法
- javascript使用switch case实现动态改变超级链接文字及地址
- ASP中用select case代替其他语言中的switch case, default用case else
- MySQL 的CASE WHEN 语句使用说明
- mysql case
- Python为什么没有switch/case语句?
- sql中的case when的用法