版权声明:最终解释权归属Hern所有,恒! https://blog.csdn.net/qq_36761831/article/details/83004264
创建分组
分组是在SELECT语句的GROUP BY子句中建立的。
1、GROUP BY子句可以包含任意数目的列。
2、如果在GROUP BY子句中嵌套分组,数据将在最后规定的分组上进行汇总(在建立分组时,指定的所有列都一起计算,即:不能从个别的列取回数据)。
3、GROUP BY子句中列出的每个列都必须是检索列或有效的表达式,但不能是聚集函数(AVG()、COUNT()等函数)。
4、除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。
5、如果分组列中具有NULL值,则NULL将作为一个分组返回。如果有多行NULL值,他们将分为一组。
6、GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
7、使用WITH ROLLUP关键字们可以得到每个分组以及每个分组汇总级别(针对每个分组)的值。
过滤分组
使用HAVING子句进行分组过滤,HAVING子句非常类似WHERE子句,事实上,基本上所有类型的WHERE子句都可以使用HAVING子句来代替,并且HAVING子句支持所有WHERE操作符。
HAVING和WHERE的差别:WHERE子句过滤行,HAVING子句过滤分组,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤,WHERE排除的行不包括在分组中,这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。