MSSql Server基础学习系列———分组排序

--group by 分组
--分组后,select后只能显示分组依据和聚合函数
--如果一个sql语句中有group by和聚合函数,那么执行顺序是
--先分组,然后在每一组中执行聚合函数
select FClassId,count(*) as '班级人数',AVG(isnull(fage,0)) as '班级平均年龄' from newStudent
group by FClassId

select FClassId,count(*) as '班级人数',AVG(isnull(fage,0)) as '班级平均年龄' from newStudent
where FGender=N'男'
group by FClassId


--班级人大于人的班级名称和人数?
--执行过程:先where 再分组,然后对每一组进行聚合函数的计算
--那么,如果想在分组后对数据进行筛选,用having +表达式,
--注意:having是在select后的聚合函数之前执行的,所以having后用
--having是在聚合函数执行之前执行的
--count(*),而不能用select后为列取的别名

select FClassId,count(*) as '班级人数',AVG(isnull(fage,0)) as '班级平均年龄' from newStudent
group by FClassId having count(*)>3


--所有学生中学生中,男女生的人数是多少?
select FGender,COUNT(*) from MyStudent group by FGender

select FClassId,COUNT(*) from MyStudent
group by FClassId 

select * from MyStudent

--求每个班的英语和数据的平均成绩
--求所有学生中,男生的英语最高分,和女生的英语最高分.
--求英语平均成绩在分以上的班级
--1.求每个班级中男生和女生的英语平均成绩
select FClassId, AVG(isnull(fmath,0)) as '数学平均成绩',AVG(isnull(fenglish,0)) as '英语平均成绩'
from MyStudent
group by FClassId
order by FClassId

--2.求所有学生中,男生的英语最高分,和女生的英语最高分.
select FGender,MAX(FEnglish) from MyStudent
group by FGender

--3.求英语平均成绩在分以上的班级
select FClassId, AVG(isnull(fenglish,0)) as '英语平均成绩'
from MyStudent
group by FClassId
having AVG(isnull(fenglish,0)) >=75
order by FClassId

--4.求每个班级中男生和女生的英语平均成绩
select FClassId,FGender,AVG(isnull(fenglish,0)) as '英语平均成绩' from MyStudent
group by FClassId,FGender
order by FClassId


--排序
--可以有多个排序依据,用逗号分开就行了
--字段名后,可以使用asc表升序,desc表降序
--order by字句是放在sql语句的最后面的
--oeder by是对查询出来的结果集进行处理的,所以必须放在最后
select * from  dbo.NewCourse 
order by Cperiod asc,Cid desc


你可能感兴趣的:(MSSQL,分组,Server基础学习系列)