多字段分组和 having 子句
多字段分组
group by 子句的分组字段是一个字段列表,即 MySQL 支持按多个字段进行分组。具体的分组策略:分组优先级从左至右,即先按第一个字段进行分组,然后在第一个字段值相同的记录中,再根据第二个字段的值进行分组, 依次类推
使用 having 指定分组后的筛选条件
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据。having 子句的位置放在 group by 子句之后,常包含聚合函数。
比较 where 子句和 having 子句
注意:having 子句和 where 子句均用于过滤数据,两者的区别在于:where 子句对结果集进行过滤筛选,而 having 子句则对分组的结果进行筛选。
group by 子句的 with rollup 选项
group by 子句将结果集分为若干个组,使用聚合函数可以对每个组内的数据进行信息统计,有时对各个组进行汇总计算时,需要在分组之后再加上一条汇总记录,这个任务可以通过 with rollup 选项来实现。
实践练习:按照商品类型和销售地区分组统计商品数量和平均单价,并按平均单价升序显示。 根据类型分组统计商品数量和平均单价,并按平均单价升序显示平均单价高于 100 元的分组信息。 统计每条订单所订购的商品件数,并按商品件数升序显示。 统计每条订单所订购的商品件数大于 4 件的分组信息,并按商品件数升序显示。