聚集函数
AVG
select AVG(id) as aaa from AAA where bbb <> 3; where语句中可以使用非检索列 AVG函数只能平均一列,且自动忽略null值
COUNT
select count(*) from AAA; --对所有行进行计数 select count(id) from AAA; --对该列计数,忽略Null值
MAX/MIN
select max(column) from AAA; --返回最大值,自动忽略NULL 支持文档最大,文本数据如果按照文本排序,Max返回最后一行 min与Max完全相反
SUM
select sum(aaa) from AAA; --取和,忽略Null select sum(aaa * bbb) from AAA; --算数取和,忽略Null
与DISTINCT连用
select AVG(distinct aaa) from AAA; --对不同aaa平均 select count(distinct id) from AAA; select count(distinct *) from AAA; --错误写法
聚集函数组合使用
select avg(id),sum(id),max(id),min(id) from AAA;
分组数据
两个子句
group by 和 having都是select语句的两个子句
为什么分组
分组是为了更好的聚集计算
在使用分组之前聚集函数的粒度是整表或者where条件圈定的范围,使用个分组之后,group by会对where圈定的范围再度分组,这样聚集函数的粒度就变成了组,也就是在组内生效,聚集函数在分组情况下是对组内数据的聚集,而不是整表的。
分组必知
1、分组group by可以根据多列进行分组
2、分组是对分组后的数据进行汇总!所以分组汇总后只有一列
3、group by后边只能有检索列和计算字段不能有聚集函数
4、除了聚集函数所有的select列必须在group by子句中给出
5、分组列中有null值,作为一个分组返回,多行的话,多行作为一个分组
7、group by写在where子句之后,order by子句之前。
with rollup在分组之后的统计数据上再度统计,多出来一条数据。
HAVING
having与where类似,having对分组进行过滤,where对列进行过滤,having可以使用where一切运算符,where过滤在having之前。
select * from AA where group by having order by limit;