Mysql聚合函数

聚合函数又称分组函数   多行(一组)数据  返回一个结果

数据表

链接:https://pan.baidu.com/s/1dPitBSxLznogqsbfwmih2Q 
提取码:b0rp 
--来自百度网盘超级会员V5的分享

聚合函数会自动排除掉null字段

AVG SUM 适用于数值类型    

Mysql聚合函数_第1张图片

MIN MAX 适用于数值类型,字符串类型,日期时间类型的字段(或变量)

Mysql聚合函数_第2张图片

COUNT 作用:计算指定字段在查询结构中出现的个数

COUNT(*)  COUNT(1) COUNT(2) 查询的是总条数

COUNT(字段)  会排除掉null

Mysql聚合函数_第3张图片

AVG=SUM/COUNT

SQL优化的一个点:

统计表中数据 用COUNT(*)  COUNT(字段)  COUNT(1) 哪种效率更高????

如果使用的是MyISAM引擎,是没有区别的.因该引擎内部有计数器维护行数

如果使用的是Innodb引擎,COUNT(*)=COUNT(1)>COUNT(字段)

因MyISAM不支持事务,现在普遍用的都是Innodb引擎,因此COUNT(*)或者COUNT(1)效率更高

Mysql聚合函数_第4张图片

GROUP BY的使用

Mysql聚合函数_第5张图片

使用多个列分组

Mysql聚合函数_第6张图片

同样Oracle中也会报错

Mysql聚合函数_第7张图片

Mysql聚合函数_第8张图片

结论: SELECT中出现的非分组函数的字段必须声名在GROUP BY中.反之GROUP BY中的字段可以不出现在SELECT中,但是一般不出现的话 往往没有意义,不知道哪个是哪个

GROUP BY 在 FROM 后面   WHERE 后面 ORDER BY前面

新特性

GROUP BY 中使用 WITH ROLLUP

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

注意:当使用ROLLUP时候,不能同时使用ORDER BY进行结果排序,ROLLUP和ORDER BY互斥

Mysql聚合函数_第9张图片

注意 WHERE执行之前  GROUP BY 还没有执行

HAVING的使用   (用来过滤分组之后数据)

Mysql聚合函数_第10张图片

Mysql聚合函数_第11张图片

下面两种方式   推荐使用方式1  原因  方式1的执行效率高于方式2

Mysql聚合函数_第12张图片

Mysql聚合函数_第13张图片

Mysql聚合函数_第14张图片

当过滤条件中有聚合时,则过滤条件必须声明在HAVING中,当过滤条件没有聚合函数,则此过滤条件声明在WHERE和HAVING中都是可以的,但是建议放在WHERE中,效率更高

一般没有聚合的条件放在WHERE   有聚合过滤放在HAVING

WHERE与HAVING对比:HAVING适用范围更广

WHERE效率更高

Mysql聚合函数_第15张图片

SQL底层的执行过程

SELECT语句的完整结构

Mysql聚合函数_第16张图片

SQL语句的执行过程

Mysql聚合函数_第17张图片Mysql聚合函数_第18张图片

执行顺序

Mysql聚合函数_第19张图片

聚合函数练习

1.where子句可否使用组函数进行过滤?   不可以

2.查询公司员工工资的最大值,最小值,平均值,总和

Mysql聚合函数_第20张图片

3.查询各job_id的员工人数

Mysql聚合函数_第21张图片

4.查询员工最高工资和最低工资的差距(DIFFERENCE)

Mysql聚合函数_第22张图片

5.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000

Mysql聚合函数_第23张图片

6.查询所有部门的名字,location_id,员工数量和平均工资,并按平均工资降序

Mysql聚合函数_第24张图片

7.查询每个工种,每个部门的部门名,工种名和最低工资

Mysql聚合函数_第25张图片

你可能感兴趣的:(mysql,数据库)