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
对表中的数据分组后,会得到一个分组后的结果集,如何对该结果集在进行筛选?→
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 举报,一经查实,本站将立刻删除。