使用GROUP BY可对数据分组并配合聚合函数进行统计分析,如SUM、COUNT、AVG等,支持多字段分组及HAVING过滤分组结果,实现精准数据分析。

在MySQL中使用 GROUP BY 是对数据进行分组统计的核心方式,常配合聚合函数实现数据分析。它能将具有相同值的行归为一组,然后对每组执行计算操作,比如求和、计数、平均值等。
GROUP BY 的基本语法
基本结构如下:SELECT 列名, 聚合函数(列) FROM 表名 GROUP BY 分组列;
例如,有一张销售记录表sales,包含字段:product(产品)、region(地区)、amount(金额)。你想知道每个地区的总销售额:
SELECT region, SUM(amount) AS total_sales FROM sales GROUP BY region;
常用聚合函数搭配 GROUP BY
GROUP BY 通常与以下聚合函数一起使用:-
COUNT():统计每组的行数。例如统计每个产品的销售次数:
SELECT product, COUNT(*) FROM sales GROUP BY product; - SUM():求和。如上例中的总金额。
-
AVG():计算平均值。查看每个产品的平均售价:
SELECT product, AVG(amount) FROM sales GROUP BY product; -
MAX() / MIN():获取每组的最大值或最小值。例如找出每个地区最高单笔销售额:
SELECT region, MAX(amount) FROM sales GROUP BY region;
按多个字段分组
如果需要更细粒度的分组,可以基于多个列进行分组。比如查看每个地区每个产品的销售总额:
本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。
SELECT region, product, SUM(amount) AS total FROM sales GROUP BY region, product;
此时数据会先按 region 分组,再在每个 region 内按 product 分组。结合 HAVING 过滤分组结果
WHERE 用于过滤原始数据,而 HAVING 用于过滤分组后的结果。例如,只显示总销售额超过1000的地区:
SELECT region, SUM(amount) AS total_sales FROM sales GROUP BY region HAVING total_sales > 1000;
HAVING 后面可以使用别名,而 WHERE 不行。这是与 WHERE 的关键区别之一。 基本上就这些。掌握 GROUP BY 配合聚合函数和 HAVING,就能完成大多数分组统计需求。注意 SELECT 中的非聚合字段必须出现在 GROUP BY 子句中,否则会报错(尤其在 SQL 模式严格时)。









