--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