--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只能对分组后的结果做筛选