最近接手的项目中须要对集体表中的男女人数作一个统计,原来的实现是经过两个查询语句作到的——SELECT * FROM student WHERE sex='男',一样也能够查询到查询到全部女生人数和总人数,暂且不说这样会多少次链接数据库形成资源的消耗和时间的浪费,就是前台的拼接数据也得费很多脑细胞吧,何况这么low的办法,确定是有更加高效的方式的!
须要查询获得表中男生和女生各自的人数总和以及全部的人数;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;--结果:
--表结构:
--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对查询不一样类别的数据会给咱们提供很大的帮助,也确确实实会减小不少的消耗,提升响应速度!