9.聚合函数(多行函数)
聚合函数简介
简介
聚合函数也称之为多行函数,组函数或者分组函数。
聚合函数不像单行函数,聚合函数对行的分组进行操作,对每组给出一个结果,
如果在查询中没有分组,那么聚合函数将所有查询到的结果分到一组。
聚合函数类型
- AVG()
- COUNT()
- MAX()
- MIN()
- SUM()
基本语法
SELECT [* | <colimn_name>[,...]] , GROUP FUNTION(column_name)
FROM <table_name>
[WHERE condition]
[GROUP BY <column_name>]
[ORDER BY <column_name>]
使用的原则
- DISTINCT 使得函数只考虑不重复的值
- 所有聚合函数忽略空值,为了用一个值代替空值,用ISNULL或COALESCE函数
聚合函数
函数 | 描述 | 示例 |
---|---|---|
AVG(expression) | 返回一个表达式的平均值 | SELECT AVG(Price) AS AveragePrice FROM Products; |
SUM(expression) | 返回指定字段的总和 | SELECT SUM(Qty) AS TotalItemsOrdered FROM OrderDetails; |
MAX(expression) | 返回字段中的最大值 | SELECT MAX(Price) AS LargestPrice FROM Products; |
MIN(expression) | 返回字段中的最小值 | SELECT MIN(Price) AS MinPrice FROM Products; |
COUNT(expression) | 返回查询的记录总数 | SELECT COUNT(ProductID) AS NumberOfProducts FROM Products; |
AVG()函数
-
对分组进行平均值计算
-
arg:参数只能是数字类型,字符类型会返回0
SUM()函数
- 对分组进行求和运算
- arg:参数只能是数字类型,字符类型会返回0
MAX()函数
- 对分组数据查找最大值
- arg:
- 数字类型:找最大值
- 字符类型:找最大字母,升序排序中的第一个
- 日期类型:找最晚的日期
MIN()函数
- 对分组数据查找最小值
- arg:
- 数字类型:找最小值
- 字符类型:找最小字母
- 日期类型:找最早的日期
COUNT()函数
- COUNT(*):返回所有列的行数,包括重复、空值
- COUNT(expr):返回非空值的计数
- COUNT(DISTINCT expr):返回列中不重复的行的计数
数据分组(GROUP BY)
单列分组
语法:
SELECT ... FROM ... WHERE ...
GROUP BY ... ORDER BY ...
在没有进行数据分组前,所有聚合函数是将结果集作为一个大的信息组进行分组进行处理。但有时需要用较小的组,用GROUP BY实现。
使用原则:
- 使用WHERE子句,可以在划分行成组以前进行过滤
- 如果有WHERE子句,那GROUP BY 在WHERE后面
- 在GROUP BY子句中必须包括列
多列分组
SELECT department_id,job_id,SUM(salary)
FROM employees
GROUP BY department_id,job_id;
上面这个代码是先将部门id进行分组,之后在部门id分组之后的结果继续进行岗位的分组。
用having约束分组结果
having是对GROUP BY分组后的结果再进行过滤。
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000;