MySQL基础篇-5-聚合函数
聚合函数
聚合函数概念
聚合函数用于一组数据,并对一组数据返回一个值
聚合函数类型
- AVG()
- SUM()
- MAX()
- MIN()
- COUNT()
AVG 和 SUM
1 | SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary) |
MIN 和 MAX
1 | SELECT MIN(hire_date), MAX(hire_date) |
COUNT
注意
COUNT(*)
返回表中记录总数,适用于任意数据类型COUNT(expr)
返回 expr 不为空 的记录总数
1 | SELECT COUNT(*) |
能不能使用
count(列名)
替换count(*)
?
count(*)
会统计值为 NULL
的行,而 count(列名)
不会统计此列为 NULL
值的行。
GROUP BY
使用 GROUP BY 将数据分成若干组
1 | SELECT column, group_function(column) |
1 | -- 单列分组 |
使用 WITH ROLLUP
关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。
1 | SELECT department_id,AVG(salary) |
注意: 当使用 ROLLUP 时,不能同时使用 ORDER BY 子句进行结果排序,即 ROLLUP 和 ORDER BY 是互相排斥的。
HAVING
HAVING 过滤分组
- 行已经被分组
- 使用了聚合函数
- 将显示满足 HAVING 子句中条件的分组
- HAVING 不能单独使用,必须要跟 GROUP BY 一起使用
1 | SELECT [column, ..] group function(column),... |
1 | SELECT department_id, MAX(salary) |
WHERE 与 HAVING 对比
1. WHERE 可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件; HAVING 必须要与 GROUP BY 配合使用,可以把分组计算的函数和分组字段作为筛选条件
2. 如果需要通过连接从关联表中获取需要的数据,WHERE 是先筛选后连接,而 HAVING 是先连接后筛选
SELECT 执行过程
查询结构
1 | -- 方式1: |
关键字顺序
1 | SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT... |
SELECT 语句的执行顺序
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment