MySQL ORDER BY 子句
MySQL JOIN 语句 

MySQL GROUP BY 子句

在 MySQL 中,GROUP BY 子句用于将查询结果按照一个或多个列进行分组,并对每个组应用聚合函数(如SUM, COUNT, AVG, MAX, MIN等)。GROUP BY 通常与 SELECT 语句一起使用,用于对数据进行汇总和分组统计。

基本语法

SELECT column1, aggregate_function(column2), ...
FROM table_name
WHERE condition
GROUP BY column1;
  • column1: 用于分组的列。

  • aggregate_function(column2): 对应列的聚合函数,可以是SUM, COUNT, AVG, MAX, MIN等。

  • table_name: 要查询数据的表。

  • condition: 可选的WHERE子句,用于过滤数据。


使用示例

假设有一个名为 users 的表,包含user_id, user_name, age, score列,可以如下使用 GROUP BY 子句:

1、按照 age 分组,统计各个年龄段的人数:

SELECT age, COUNT(user_id)
FROM users
GROUP BY age;
mysql> SELECT age, COUNT(user_id)
    -> FROM users
    -> GROUP BY age;
+------+----------------+
| age  | COUNT(user_id) |
+------+----------------+
|   21 |              1 |
|   22 |              4 |
|   23 |              2 |
|   24 |              2 |
+------+----------------+
4 rows in set (0.00 sec)


2、按照 age 分组,统计各个年龄段的积分总和

SELECT age, sum(score)
FROM users
GROUP BY age;
mysql> SELECT age, sum(score)
    -> FROM users
    -> GROUP BY age;
+------+------------+
| age  | sum(score) |
+------+------------+
|   21 |         18 |
|   22 |        104 |
|   23 |         64 |
|   24 |         41 |
+------+------------+
4 rows in set (0.00 sec)


3、按照 age 分组,统计各个年龄段的积分平均值,并按平均值升序排序

SELECT age, AVG(score)
FROM users
GROUP BY age 
order by AVG(score) ASC;
mysql> SELECT age, AVG(score)
    -> FROM users
    -> GROUP BY age 
    -> order by AVG(score) ASC;
+------+------------+
| age  | AVG(score) |
+------+------------+
|   21 |    18.0000 |
|   22 |    26.0000 |
|   23 |    32.0000 |
|   24 |    41.0000 |
+------+------------+
4 rows in set (0.00 sec)


多列分组

您可以在GROUP BY子句中指定多个列,以便按照多个列的组合进行分组:

SELECT column1, column2, aggregate_function(column3), ...
FROM table_name
GROUP BY column1, column2;


注意事项

  • 在GROUP BY子句中列出的每个列必须在SELECT列表中出现,或者是一个聚合函数的参数。

  • 聚合函数应用于每个分组后的结果集,而不是整个表。

  • 如果使用了GROUP BY,则除了聚合函数外的列,每个列的值必须在该组内是唯一的,否则MySQL会返回错误或不确定的结果。


总结

GROUP BY 子句是在 MySQL 中用于对查询结果进行分组和聚合的重要部分。通过合理使用 GROUP BY,可以按照指定的列对数据进行分组统计,用来生成汇总报告或统计结果。确保了解如何正确使用聚合函数和处理多列分组,能够帮助您有效地分析和总结数据。