@[TOC]分组函数的定义
分组函数又叫做多行处理函数,输入多行数据,输出一行数据,可以把它比作一台加工机和合成机,把多个物品放进去,最后生产出一个新的产品。
分组函数有五大函数,分别为max(),min(),avg(),sum(),count()。
需要特别注意:分组函数在使用之前,数据先分好组,才能一组一组的使用分组函数。若对数据不进行分组,则则整张表的数据就是一组。
理解:把一大堆东西,合理分配,分成一小堆一小堆,然后再对每一堆进行处理。
分组函数就是比较精准,分别对每一组的东西进行处理,然后得出根据这每一组得出每一组的结论,也就是说将一大家子人进行了分家的操作,然后对每一家进行处理,选出一个代表来管理每一个家。
@[TOC]注意事项
@[TOC] null
当对一组的数据进行加工操作的时候,如果有NULL,分组函数会自动将其忽略,跳过去不去操作NULL,分组函数在此时就比较聪明和专一,只对数据感兴趣,对于别的东西是不感兴趣的。
例:
@[TOC]count()和count(具体某个字段)的区别
count()是多行处理函数,对于count(具体某个字段)来说,表示统计某个字段下的多行数据,自动排除NULL。
count(
)表示统计整张表的总行数。若一行里面全部是NULL,则代表这一整行是不存在的。
@[TOC] 为什么分组函数不能直接用在where语句后面?
例:
第四点:分组函数组合使用。
例:

番外:1:什么是分组查询?
对于一些个别需求,需要先对数据分组,然后一组一组的操作。
例:计算每个部门的最高薪资;
计算每个工作岗位的平均薪资。
2:如何使用分组查询?
select
。。。
from
。。。
group by
一个字段名或者多个字段名。
3:关键字的执行顺序是什么?
from
where
group by
select
order by
先从这张表,对数据进行过滤,然后对数据分组,在查出数据,对数据进行排序。
这些语句的执行顺序是不能改变的,他们都是对数据进行处理,对数据情有独钟。
4:为什么分组函数不能放在where之后?
例:
这条select语句代表where语句是对数据进行处理的,对数据进行过滤功能,分组函数是对数据进行处理,得到数据,where语句通过使用分组函数,来获得数据,进行过滤操作。也就是说,分组函数在此时是where的的小弟,为where服务,提供数据,但是这个小弟此时不能工作,此时数据还没有进行分组,分组函数对于数据不能操作,因为group by 是对数据进行分组的,select语句还没有执行,sql语句的执行是有先后顺序的。
5:为什么分组函数可以放在select之后?
在select使用分组函数的之前,group by 语句已经执行完了,意味着数据已经分好了组。
问:但是在select语句,并没有使用group by ,是不是意味着没有对数据进行分组?
答:并不是,若没有group by 语句,则说明默认为整张表的数据为一组。
问:在上一个where语句里面也没有使用group by ,是不是说明已经默认了?
答:并不是,group by 语句在where语句之后,意味着还没有对数据分好组。从语法的角度来看,语句是错误的。