1. 前言
上文我们讲到了单行函数.实际上SQL还有一类叫做聚合函数, 它是对一组数组进行汇总的函数, 输入的是一组数据的集合, 输出的是单个值.
2. 聚合函数
用于处理一组数据, 并对一组数据返回一个值.
有如下几种聚合函数 : AVG(), SUM(), MAX(), MIN(), COUNT().
3. AVG()与SUM()
该可以对数值型数据使用AVG和SUM函数.计算一列数据的平均值/总和.
例 :
4. MIN()与MAX()
可以对任意数据类型的数据使用MIN与MAX函数,如日期类型,字符串类型的数据.
例 :
5. COUNT()
COUNT(*)是SQL92定义的标准统计行数的语法,其用于返回表中记录的总数,适用于任何数据类型.而COUNT(expr)返回表中expr不为空的记录总数.
例 :
该表中字段有为空的记录,所以要比第一种情况的结果要少.
6. GROUP BY(分组)
我们可以使用GROUP BY子句将表中数据分为若干组.
注 :
- 在SELECT列表中所有未包含在组函数中的列都应该包含在GROUP BY中.
- 但包含在GROUP BY子句中的列不必包含在SELECT子句中.
例 :
GROUP BY子句将表中记录依据jobid分组,AVG(salary)计算每组的salary总和的平均值.
7. 多列分组
例 :
GROUP BY子句将表中记录依据该二者分组,只有不同记录中该二者字段均相等的记录才能被分为一组.
注 :
- 使用WITH ROLLUP关键字之后,在所有查询的分组记录之后增加一条记录,该记录计算查询出所有记录的总和,即统计记录数量.
- 使用WITH ROLLUP关键字就不能使用ORDER BY关键字,即二者是互斥的.
例 :
8. HAVING关键字
过滤分组 : HAVING子句
- 行已经被分组.
- 使用了聚合函数
- 满足HAVING子句中条件的分组将被显示.
- HAVING不能单独使用,必须配合GROUP BY一起使用.
例 : 用来过滤已分组的记录
可以在HAVING子句中使用聚合函数,但在WHERE子句中不允许这么做.
例 :