🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在使用group by子句之前,需要知道一些重要的规定 * group by子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致的进行数据分组 * 如果在group by子句中嵌套了分组,数据将在最后指定的分组上进行汇总.换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据) * group by子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数).如果在select中使用表达式,则必须在group by子句中指定相同的表达式,不能使用别名 * 大多数sql实现不允许group by列带有长度可变的数据类型(如文本或备注型字段) * 除聚集计算语句外,select语句中的每一列都必须在group by子句中给出 * 如果分组列中包含具有null的值,则null将作为一个分组返回,如果列中有多行null值,他们将分为一组 过滤分组 除了能用group by分组数据外,sql还允许过滤分组,规定包括哪些分组,排除哪些分组. having非常类似where.事实上,目前为止所有的类型的where字句都可以用having来替代 唯一差别是,where过滤行,而having过滤分组 **having和where差别** where在数据分组前进行过滤,having在数据分组后进行过滤.这是一个重要的区别,where排除的行不包括在分组中.这可能会改变计算值,从而影响having子句中基于这些值过滤掉分组 **分组和排序** ![](https://box.kancloud.cn/3e66baf65284e4d26e9c66cf0a570bf2_1298x384.png) 一般在使用group by子句的时候,应该也给出order by子句.这是保证数据正确排序的唯一方法. 千万不要依赖group by排序数据