您的位置:首页 > 数据库

case when的使用【sql深入学习】

2016-06-28 11:31 387 查看
    最近接手的项目中需要对集体表中的男女人数做一个统计,原来的实现是通过两个查询语句做到的——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对查询不同类别的数据会给我们提供很大的帮助,也确确实实会减少很多的消耗,提高响应速度!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  case sql深入