使用GROUP BY子句按类别分组,结合SUM、count、AVG等聚合函数统计每组数据,如select category, SUM(amount) FROM sales GROUP BY category;可用HAVING过滤分组结果,实现按条件筛选,如HAVING SUM(amount) > 1000。

在 sql 中实现按类别统计,主要通过 GROUP BY 子句完成。它能将数据按照一个或多个字段分组,再结合聚合函数对每组数据进行统计计算。
使用 GROUP BY 进行基础分类统计
假设有一张销售记录表 sales,包含商品类别(category)和销售额(amount)。要按类别统计总销售额,写法如下:
SELECT category, SUM(amount) AS total_amount
FROM sales
GROUP BY category;
这条语句会把相同 category 的记录归为一组,每组计算 amount 的总和。
常用聚合函数配合分组
除了求和,还可以用其他聚合函数实现不同类型的统计:
- COUNT():统计每类的记录条数
- AVG():计算每类的平均值
- MAX()/MIN():获取每类的最大值或最小值
例如统计每个类别的订单数量和平均金额:
SELECT category,
COUNT(*) AS order_count,
AVG(amount) AS avg_amount
FROM sales
GROUP BY category;
添加条件筛选分组结果
如果只想查看满足特定条件的分组,可用 HAVING 子句过滤分组后的结果。比如只显示总销售额超过 1000 的类别:
SELECT category, SUM(amount) AS total_amount
FROM sales
GROUP BY category
HAVING SUM(amount) > 1000;
注意:WHERE 用于分组前的行级过滤,HAVING 用于分组后的条件判断。
基本上就这些。掌握 GROUP BY 搭配聚合函数和 HAVING,就能灵活实现各类分组统计需求。


