Mysql的分组查询和统计计算
作者:mmseoamin日期:2023-12-18

1.聚合函数

聚合函数实现数据的统计计算,用于计算表中的数据,返回单个计算结果。聚合函数包括COUNT、SUM、AVG、MAX、MIN等函数,下面分别介绍。

(1)COUNT函数

COUNT函数用于计算组中满足条件的行数或总行数。

语法格式:

COUNT ( { [ ALL | DISTINCT ] <表达式> } | * )

其中,ALL表示对所有值进行计算,ALL为默认值,DISTINCT指去掉重复值,COUNT函数用于计算时忽略NULL值。

【例6.12】求学生的总人数。

mysql> SELECT COUNT(*) AS 总人数

    -> FROM student;

该语句采用COUNT(*)计算总行数,总人数与总行数一致。

查询结果:

+----------+

| 总人数  |

+----------+

|        6     |

+----------+

1 row in set (0.09 sec)

【例6.13】查询通信专业学生的总人数。

mysql> SELECT COUNT(*) AS 总人数

    -> FROM student

    -> WHERE speciality='通信';

该语句采用COUNT(*)计算总人数,并用WHERE子句指定的条件进行限定为201836。

查询结果:

+---------+

| 总人数  |

+---------+

|          3 |

+---------+

1 row in set (0.01 sec)

SUM和AVG函数

SUM函数用于求出一组数据的总和,AVG函数用于求出一组数据的平均值,这两个函数只能针对数值类型的数据。

语法格式:

SUM / AVG ( [ ALL | DISTINCT ] <表达式> )

其中,ALL表示对所有值进行计算,ALL为默认值,DISTINCT指去掉重复值,SUM / AVG函数用于计算时忽略NULL值。

MAX和MIN函数

MAX函数用于求出一组数据的最大值,MIN函数用于求出一组数据的最小值,这两个函数都可以适用于任意类型数据。

语法格式:

MAX / MIN ( [ ALL | DISTINCT ] <表达式> )

其中,ALL表示对所有值进行计算,ALL为默认值,DISTINCT指去掉重复值,MAX / MIN函数用于计算时忽略NULL值。

GROUP BY子句

GROUP BY子句用于指定需要分组的列。

语法格式:

GROUP BY [ ALL ] <分组表达式> [,…n]

其中,分组表达式通常包含字段名,ALL显示所有分组。

HAVING子句

HAVING子句用于对分组按指定条件进一步进行筛选,过滤出满足指定条件的分组。

语法格式:

[ HAVING <条件表达式> ]

其中,条件表达式为筛选条件,可以使用聚合函数。

当WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句在一个SELECT语句中时,执行顺序如下:

(1)执行WHERE子句,在表中选择行。

(2)执行GROUP BY子句,对选取行进行分组。

(3)执行聚合函数。

(4)执行HAVING子句,筛选满足条件的分组。

(5)执行ORDER BY子句,进行排序。

注意: HAVING子句要放在GROUP BY子句的后面,ORDERBY子句放在HAVING子句后面。