--group by分组查询
--查询男生女生各有多少人
--语法:group by[字段名]
--分组的目的:做统计
select stuGender,count(1) from TbStudent group by stuGender
--分组后的count,是统计各个分组内的记录条数,而不是整个表的记录条数
--有多少个分组,就会count出多少个值
--练习:查询每个地方有多少名同学
--根据分组统计信息是,在select后边不是必须有分组的那个字段
--但是如果在select的查询列表中没有那个分组的字段,查询结果集就很难看懂了
--根据各个地区人数排序
select stuAddress,count(1) as 人数 from TbStudent group by stuAddress
order by 人数
--分组查询原则:当在select查询语句中出现聚合函数是,
--不能在select后边的查询字段列表中再出现其他字段。
--除非,该字段是出现在group by字句中,或者也出现在聚合函数里
--反过来说,在分组查询中,select后边的字段列表必须要和group by中的字段名一一对应
--除非它放在聚合函数里
select COUNT(1) as 人数,AVG(stuMath) as 数学平均分 from TbStudent
select count(1) from TbStudent
select stuClassId,avg((stuMath+stuEnglish)/2) as 平均分 from TbStudent
where stuGender=1 group by stuClassId
having avg((stuMath+stuEnglish)/2)>60
--where条件,只能筛选表里出现的原始字段数据
--如果要根据分组统计后出现的数据进行筛选,要用having子句
--having只能跟group by搭配使用
--having后不能使用列的别名
--注意:having是对分组结果的筛选,having中不能出现为参与分组的列
--列的别名只能在order by之后用,其他地方不能用
--总结:where只能对原始表中出现的数据做筛选是使用。
--having只能对分组后的结果做筛选