MySQL(8.0.16)聚合函数详解
聚合函数分类:
函数名称 | 函数说明 |
---|---|
count() | 计算个数 |
sum() | 求和 |
avg() | 平均数 |
max() | 最大值 |
min() | 最小值 |
聚合函数特点:
1.sum(),avg()一般用于处理数值型,max(),min(),count()可以处理任何类型
2.以上分组函数都可以忽略NULL值来进行计算。
3.可以和distinct搭配实现去重的运算。
4.和聚合函数一同查询的字段要求是group by后的字段。
举例说明:
以下表为基础进行举例说明:
分组函数的简单使用:
count()函数
1.查询上表总个数
也等价于下面这个语句
但是因为count()函数忽略null值,所以下面这句语句的总数只有6个
效率:
MYISAM存储引擎下 ,count(* )的效率高
INNODB存储引擎下,count(* )和count(1)的效率差不多,比COUNT(字段)要高一些.
所以一般使用count(*)用作统计行数
大家可以用下面的语句来查看自己的默认存储引擎,
MySQL在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是INNODB
sum() 函数
2.计算表的lowest_sal字段的sum与highest_sal字段的sum
因为sum()函数用于处理数值型,所以如果计算grade_level的和,如下所示:
这里虽然mysql没有报错,但这个数值毫无意义。
avg()函数
3.计算表的lowest_sal字段的平均数与highest_sal字段的平均数
因为avg()函数也是用于处理数值型,所以如果计算grade_level的平均数,如下所示:
这里虽然mysql也没有报错,但这个数值也是毫无意义的。
max()函数
4.计算表的lowest_sal字段的最大值与highest_sal字段的最大值
因为max函数可以用来处理任何类型,所以当求字符型grade_level的最大值时,如下所示:
使用max函数查询一个字符串类型的字段时,因为字符串类型大小比较是先比较首字符的ASCII码,然后依次往后进行比较
大家有兴趣可以试试比较字符串‘10000’和‘9999’的最大值,会发现最大值其实是字符串‘9999’
如下所示:
当这个字段比较大小时会发现最大的是‘9999’
顺带说下字符串的比较把:
比较的时候,从字符串左边开始,一次比较每个字符,直接出现差异、或者其中一个串结束为止。
比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于C>B,所以不再继续比较,结果就是ACDE大。
再如ABC与ABC123比较,比较三个字符后第一个串结束,所以就是后面一个串大。
所以,长度不能直接决定大小,字符串的大小是由左边开始最前面的字符决定的。
如果真的要比较,那就转为数值型后再比较把:
例如这样:
上述这样写会默认帮你转为数值型后再进行比较谁最大。
min()函数
5.计算表的lowest_sal字段的最小值与highest_sal字段的最小值
min()函数跟max()函数差不多,也是可以处理任何数据类型,理解max()函数后,min()函数也是一样的。