聚合函数(多行函数)
聚合函数作用于一组数据,并对一组数据返回一个值。
常见聚合函数
AVG和SUM函数
只作用于数值类型数据,不包含NULL
求工资平均值和总和
MIN和MAX函数
可以作用于任何数据类型(如字符串,日期),不包含NULL
作用时按字符串排序规则,逐个比较
COUNT函数
返回查询结果有多少行,不包含空值
当计算平均工资时,AVG不包含空值,所有不能计算没有工资的人,可以写成
SUM(salary)/count(1)
基本聚合函数
GROUP BY分组函数
根据组别来将查询结果分组,例如按部门ID计算平均工资。
SQL标准:SELECT中的字段除了函数字段外必须出现在GROUP BY中
GROUP BY 中字段不需要出现在SELECT中
出现顺序:SELECT > WHERE > GROUP > ORDER > LIMIT
还可以使用多个分组,例如将部门分组并且将工种分组,则该部门的不同工种一组
GROUP BY新特性:WITH ROLLUP
除了分组结果外,还另增一行记录计算总体的结果,不能与ORDER一起使用
最后一行是总体的平均值
HAVING关键字
用于被GROUP BY 分组后进行筛选条件,必须与其一起使用
GROUP BY 不能与WHERE一起使用
WHERE和HAVING的对比
区别1:
WHERE 可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件; HAVING 必须要与 GROUP BY 配合使用,可以把分组计算的函数和分组字段作为筛选条件。
区别2:
如果需要通过连接从关联表中获取需要的数据,WHERE 是先筛选后连接,而HAVING 是先连接后筛选。
SELECT执行顺序
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY-> LIMIT从左向右优先执行
SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连接条件
AND 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...
#(1)from:从哪些表中筛选
#(3)where:从表中筛选的条件
#(4)group by:分组依据
#(5)having:在统计结果中再次筛选
#(6)order by:排序
#(7)limit:分页