微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CSharp基础起步第十六期---SqlServer 基础04聚合函数,数据分组


1.数据分组

在使用select查询的时候,有时需要对数据进行分组汇总(即:将现有的数据按照某列来汇总统计),这时就需要用到group by语句。

1.请从学生表中查询出每个班的班级Id和班级人数:(见备注1)

2 .请从学生表中查询出每个班的班级Id和班级中男同学的人数: (见备注2)

备注1:

select

tSClassId as 班级Id,

count(*) as 班级人数

from TblStudent

group by TSClassId

备注2:

select

tSClassId as 班级Id,

count(*) as 班级人数

from TblStudent

where tSGender='男'

group by TSClassId

GROUP BY子句必须放到WHERE语句的之后,Group By与Order By都是对筛选后的数据进行处理,而Where是用来筛选数据的。

没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的 (聚合函数中除外)

错误: select sClassId,count(sName),sAge from student group by sClassId

正确: select sClassId,avg(sAge) from student group by sClassId



2.Having语句(对组的筛选,哪些组显示哪些组不显示)

对表中的数据分组后,会得到一个分组后的结果集,如何对该结果集在进行筛选?→

having

查询班级人数超过三个人的班级。

select

tSClassId as 班级Id,

count(*) as 班级人数

from TblStudent

group by TSClassId

having count(*)>3

在Where中不能使用聚合函数,必须使用Having,Having要位于Group By之后。

Having的使用几乎是与where一样的,也可以用in。

Having count(*) in (5,8,10)

select sClassId,count(sName) from student where count(sName)>3 group by sClassId  (错误的)

聚合函数不应出现在WHERE 子句中

Group by 前可以有where,是对筛选过后的数据进行分组

3.sql语句的执行顺序

1>…From 表 Join 表 on
2>…Where 条件
3>…Group by 列
4>…Having 筛选条件 

5>…Select 5-1>选择列,5-2>distinct,7>top(应用top选项最后计算)

6>…Order by 列


欢迎关注趣味CSharp,完整笔记与您分享~~~~~~~~

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐