分组查询
概念:把分散的数据按某种规则将数据分成不同的组、或所有数据整体作为一个组,对组级别的数据进行分析,每组得到一个返回值。
五个聚合函数:
SUM():求合计值
MAX():求最大值
MIN():求最小值
AVG():求平均值
COUNT():计数
注意:
1)所有聚合函数都是针对非空值进行的统计
2)COUNT()的特殊用法:若是在不确定哪些字段不含空值的情况下统计总数据量,可以使用COUNT(1)或COUNT(*)来统计
3)SUM和AVG只针对数值,其他三个可针对任意类型
思考:哪些聚合函数可能出现空值,哪些聚合函数不可能出现空值
当一列全为空值时,聚合函数除了COUNT()外都会出现空值。 COUNT()不返回空值,返回0.
语法:
SELECT COL_LIST,聚合函数,常量
FROM TB_NAME
GROUP BY COL_LIST;
语法解释:
对数据源TB_NAME按照COL_LIST分组,统计各分组的分析情况
注意:
1.对于含有GROUP BY子句的SQL语句,SELECT子句中仅允许出现
1)GROUP BY中出现过的字段
2)聚合函数
3)常量
2.对于不含有GROUP BY子句但SELECT子句中含有聚合函数的情况,SELECT子句中除聚合函数与常量外,不能再出现其他字段
3.GROUP BY 之后的字段没有优先级
字段放在前后,不影响最终分组结果
分组过滤
语法:
SELECT COL_LIST,聚合函数,常量
FROM TB_NAME
GROUP BY COL_LIST
HAVING 以聚合函数为基础的条件判断;
语法解释:
对数据源TB_NAME按照COL_LIST分组,统计各分组的分析情况,并对分析结果进行筛选
WHERE与HAVING的区别和联系
1.都是做条件筛选用的
2.WHERE不必和GROUP BY连用,HAVING必须和GROUP BY连用
3.WHERE筛选的是针对FROM后表的数据,HAVING是针对GROUP BY分组之后的数据进行筛选
4.WHERE中的部分条件可以写在HAVING中,但非常影响执行效率,不建议使用
5.只有在GROUP BY子句中出现的字段,才能够由WHERE子句中转写到HAVING子句中