聚合函数小记


一、聚合函数介绍

什么是聚合函数?
聚合函数作用于一组数据,并对一组数据返回一个值。

1.1AVG和SUM函数

可以对数值型数据使用AVG 和 SUM 函数。

SELECT AVG(表字段),SUM(表字段),AVG(表字段) 
FROM employees;

1.2MIN和MAX函数

可以对任意数据类型的数据使用 MIN 和 MAX 函数。

SELECT MIN(表字段), MAX(表字段) 
FROM employees;

1.3 COUNT函数

  1. 作用:计算指定字段在查询结构中出现的个数(不包含NULL值的)
  2. 公式:AVG = SUM / COUNT
    注意:计算指定字段出现的个数时,是不计算NULL值的。

问:如需要统计表中的记录数,使用COUNT()、COUNT(1)、COUNT(具体字段) 哪个效率更高呢?
1. 如果使用的是MyISAM 存储引擎,则三者效率相同,都是O(1)。
2.如果使用的是InnoDB 存储引擎,则三者效率:COUNT(
) = COUNT(1)> COUNT(字段)。


二、GROUP BY

2.1 使用GROUP BY应注意的点

1.SELECT中出现的非组函数的字段必须声明在GROUP BY 中。反之,GROUP BY中声明的字段可以不出现在SELECT中。
2.GROUP BY 声明在FROM后面、WHERE后面,ORDER BY 前面、LIMIT前面
3.MySQL中GROUP BY中使用WITH ROLLUP

使用WITH ROLLUP 关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。


三、HAVING

HVING是用来过滤数据的

3.1 使用HAVING的要求

1.如果过滤条件中使用了聚合函数,则必须使用HAVING来替换WHERE。否则,报错。
2.HAVING 必须声明在 GROUP BY 的后面。
3.开发中,我们使用HAVING的前提是SQL中使用了GROUP BY。


3.1.1 结论

1.当过滤条件中有聚合函数时,则此过滤条件必须声明在HAVING中。
2. 当过滤条件中没有聚合函数时,则此过滤条件声明在WHERE中或HAVING中都可以。但是,建议大家声明在WHERE中(效率更高)。


3.1.2WHERE 与 HAVING 的对比

1.1. 从适用范围上来讲,HAVING的适用范围更广。
2. 如果过滤条件中没有聚合函数:这种情况下,WHERE的执行效率要高于HAVING


四、SQL底层执行顺序

4.1 SELECT 语句的完整结构

4.1.1 sql92语法:

SELECT 表字段1,表字段2,表字段3(存在聚合函数)
FROM 表名
WHERE 多表的连接条件 AND 不包含聚合函数的过滤条件
GROUP BY ...,....
HAVING 包含聚合函数的过滤条件
ORDER BY ....,...(ASC / DESC )
LIMIT ...,....

4.1.2 sql99语法:

SELECT 表字段1,表字段2,表字段3(存在聚合函数)
FROM 表名1 (LEFT / RIGHT)JOIN 表名2 ON 多表的连接条件
(LEFT / RIGHT)JOIN 表名三 ON 多表的连接条件
WHERE 不包含聚合函数的过滤条件
GROUP BY ...,....
HAVING 包含聚合函数的过滤条件
ORDER BY ....,...(ASC / DESC )
LIMIT ...,....

4.2 SQL语句的执行过程:

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT

例:

SELECT DISTINCT ... 顺序 5 
FROM ... 顺序1
WHERE...  顺序2 
GROUP... 顺序 3 
HAVING ... 顺序 4
ORDER BY ... 顺序 6 
LIMIT...顺序 7
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值