常见的聚合函数
#1、常见的几个聚合函数
AVG 平均值 SUM 求和 MAX 最大值 MIN 最小值 * 以上聚合函数自动过滤空值
方差,标准差,中位数
count()
1,作用 计算指定字段在查询结构中出现的个数 count(1) count(字段) count(*)
注意:计算指定字段出现的个数时,是不计算null值的
那么用哪个效率更高,如果是myinsam存储引擎,则三者效率相同,都是o1
如果是innoDB 则三者效率 count(*) = count(1)>count(字段)
#2、group by 的使用
分组操作
select 中出现的非组合函数的字段,必须声明在GROUP BY 中
反之 ,GROUP BY 中声明的字段可以不出现在select 中
#在GROUP BY中 使用 with rollup 把所有的都计算出来,计算整体的平均。谨慎和 order by 使用 会相互矛盾
#HAVING 的使用
要求1、如果过滤条件中使用了 聚合函数,则必须使用having 来替换where ,否则报错
要求2、having 必须声明在group by 的后面
要求3、如果没有用group by 可以不用having,开发中一般都是配合使用
结论:当过滤条件中有聚合函数时。则此时过滤条件必须声明在having中
当过滤条件中没有聚合函数时,则此过滤条件声明在where中或者having中都可以,但是,建议声明在where中(效率高,范围广)
#sql底层执行原理
语句的完整结构
#sql92语法
select ,,,。,,,。(存在聚合函数)
from ,,,。,,,
where 多表链接条件 and 不包含聚合函数的过滤条件
group by ,,,
having 包含聚合函数的过滤条件
order by ,,, desc/asc
limit,,,/,,,
#sql99语法
select ,,,。,,,。(存在聚合函数)
from ,,,join,,,on
where 不包含聚合函数的过滤条件
group by ,,,
having 包含聚合函数的过滤条件
order by ,,, desc/asc
limit,,,/,,,
sql执行过程:
#from ,,,,.,,,-> on --> (left right join) --> where -->group by --> having --> select --> distinct --> order by --> limit

浙公网安备 33010602011771号