sqlserver——分组查询
sql server⾥分组查询通常⽤于配合,达到分类汇总统计的信息。⽽其分类汇总的本质实际上就是先将信息排序,排序后相同类别的信息会聚在⼀起,然后通过需求进⾏统计计算。
使⽤Group BY 进⾏分组查询
--查询男⼥⽣的⼈数
在没有学习分组查询之前,我们可以安装常规的思路解决查询需求:
select count(*) from person where sex='男'
select count(*) from person where sex='⼥'
那么现在⼜要个需要时,查询每个班级的总⼈数
如果按照常规解决查询,那么我们应该思考的是:
1.每个班级,我们并不知道在表⾥有哪些班级,那么我们where 后的条件如何写?
2.如果该表⾥有1000个班组,那么我难道要写⼀千条where查询语句?
⾯对这样的问题 sql server为我们准备了Group by 关键字实现分组查询
在使⽤介绍Group by关键字之前,我们先来看看系统实现分组查询的原理和逻辑:
映射成SQL语句:
select sex ,count(*)  as ⼈数  from Person group by sex
这个简短的语句,经过上图的原理,应该要知道,第⼀步是先from查询表的所有信息,然后group by根据字段进⾏分组后在统计汇总
上⾯的案例是通过Count()函数进⾏统计,当然分组汇总还可以使⽤其他的聚合函数进⾏汇总。
ps:为了保证完整性,系统约定俗成,在使⽤了聚合函数的查询语句中,除了聚合函数,可以在查询
列表上,要出现其他字段,那么该字段就必须为分组字段,⽽且该字段⼀定要跟随在GROUP BY关键字后⾯。
groupby分组多列分组查询
--实例需求,查询每⼀个班组,男⼥⽣的⼈数
分析:显然需求是两组,每⼀个班需要划分组,男⼥也需要分组
实现图解:
SQL语句:
select  TeamID,sex,COUNT(*)  from student group by TeamID,Sex order by TeamID
经验:搞清楚需要分⼏组,搞清楚分组的顺序,⼀轮⼀轮的分,系统是等分组之后才会进⾏汇总信息
使⽤HAVING⼦句
演⽰⽰例:--查询每⼀个班级男⼥⽣的⼈数,同时只需要显⽰⼈数数量超过1⼈的记录
分析:此查询显然是对上⼀个⽰例的多列分组进⾏筛选。
试在这学的知识范围内来解决此查询需求。。。。
解决办法,使⽤HAVING关键字:
HAVING核⼼:是对分组统计之后的结果集,进⾏数据的筛选
SQL语句:
select  TeamId,sex,COUNT(*)  as renshu from Person group by TeamId,Sex  having count(*)>=1 order by TeamId
where和having的不同:where是对原始数据进⾏筛选,having是对分组时候的数据进⾏筛选
查询语句的执⾏顺序
在这⾥引出查询机制⾥对查询语句⾥的关键字的执⾏顺序
查询关键字家族成员
select  top/distinct 字段列表 from 表列表 where 筛选条件 group by 分组字段列表 having  对分组之后得到的结果集筛选  order by 排序字段列表
执⾏顺序:
1.from
2.where
4.having
5.根据select 关键之后的要显⽰的字段,进⾏结果集显⽰

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。