聚合函数(聚集、分组)
作用于一组数据,并对一组数据返回一个值。
一、常用的聚合函数
-
AVG和SUM函数
可以对数值型数据使用
-
MIN和MAX函数
可以对任意数据类型使用
SELECT AVG(salary),SUM(salary),MIN(salary),MAX(salary) FROM employees;
-
COUNT函数
可以对任意数据类型使用,返回表中的记录总数
区别:COUNT(*),COUNT(1),COUNT(列名)
① 搜索引擎为MyISAM,则三者的执行效率相同
② 搜索引擎为Innodb,前两个优于搜索列名
③ COUNT(列名)会自动去NULL,COUNT( * )不会去空,所以两者不能无条件混用
二、GROUP BY
-
使用单列分组
SELECT department_id ,AVG(salary),SUM(salary) FROM employees GROUP BY department_id;
-
使用多列分组
SELECT department_id,job_id ,AVG(salary),SUM(salary) FROM employees GROUP BY department_id,job_id;
-
连接使用WITH ROLLUP
会对GROUP BY 后的第一个字段进行升序排列,并在所有查询记录后增加一条记录,该记录为所有查询记录之和。
WITH ROLLUP 与 ORDER BY 不能同时使用,因为前者会产生额外一条统计记录的原因
三、HAVING
-
使用条件
必须跟在GROUP BY之后,与其同时使用
适用于使用了聚合函数的筛选条件,因为WHERE中不允许使用聚合函数
-
HAVING与WHERE对比
优点 缺点 WHERE 先筛选数据,再进行关联,执行效率高 HAVING 可以使用聚合函数进行筛选 -
开发中的选择
先使用WHERE对普通条件进行筛选
再使用HAVING对聚合函数条件筛选
-
使用示例