分组函数有:
max(某字段):选出字段中最大值
min(某字段):选出字段中最小值
sum(某字段):将该字段求和
avg(某字段):求出该字段的平均值
count(某字段):统计字段行数
本文用这个表举例:
注意事项:
1.多行函数自动忽略null,无需对null提前处理
2.count(*)和count(某字段)有什么区别?
count(*):统计总行数
count(某字段):统计该字段下所有不为null的元素总数
3.多行函数不能直接使用在where子句中
4.所有的多行函数可以组合在一起使用
eg: select sum(sal),min(sal),max(sal),avg(sal),count(*) from emp;
下面解释一下第三条的原因:
首先mysql中的关键字书写顺序是这样的:
select...from...where...group by...order by
简单说明一下:
select + 某(些)字段
from + 某个表
where + 所挑选字段符合的条件
group by + 分组的字段条件
order by + 按照字段的顺序进行排序
然而他们的执行顺序是这样的:
1.from 先确定数据的表
2.where 选出符合where条件的数据
3.group by 按照字段分组
4.select 将数据挑出
5.order by 最后进行排序
为什么分组函数不能使用在where子句中?
因为多行函数在执行的时候必须先分组,后才能使用。where执行的时候,还没分组。
eg:select ename,sal from emp where sal > min(sal);
看起来没有错误,运行就报错。
而为什么select sum(sal) from emp;中没有分组,但是sum()就可以用呢?
因为sum()在select子句里,select在group by之后执行。