跳到主要内容

MySQL GROUP BY 子句

在 MySQL 中,GROUP BY 子句用于将查询结果按照一个或多个列进行分组。它通常与聚合函数(如 COUNTSUMAVGMAXMIN 等)一起使用,以便对每个分组进行计算。通过 GROUP BY,我们可以轻松地对数据进行分类和汇总。

1. 基本语法

GROUP BY 子句的基本语法如下:

sql
SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1;
  • column1:要分组的列。
  • aggregate_function(column2):对分组后的数据进行计算的聚合函数。
  • table_name:要查询的表。
  • condition:可选的筛选条件。

2. 示例:按单列分组

假设我们有一个名为 orders 的表,其中包含以下数据:

order_idcustomer_idamount
1101100
2102200
3101150
4103300
5102250

如果我们想按 customer_id 分组,并计算每个客户的订单总金额,可以使用以下查询:

sql
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id;

输出结果:

customer_idtotal_amount
101250
102450
103300
备注

在这个例子中,SUM(amount) 计算了每个 customer_id 对应的 amount 列的总和。

3. 示例:按多列分组

GROUP BY 也可以按多列进行分组。例如,假设我们有一个 sales 表,其中包含以下数据:

sale_idproductregionamount
1ANorth100
2BSouth200
3ANorth150
4BSouth300
5ASouth250

如果我们想按 productregion 分组,并计算每个产品在每个地区的销售总额,可以使用以下查询:

sql
SELECT product, region, SUM(amount) AS total_sales
FROM sales
GROUP BY product, region;

输出结果:

productregiontotal_sales
ANorth250
ASouth250
BSouth500
提示

在这个例子中,GROUP BYproductregion 两列进行分组,SUM(amount) 计算了每个分组的总销售额。

4. 实际应用场景

场景 1:统计每个部门的员工数量

假设我们有一个 employees 表,其中包含以下数据:

employee_idnamedepartment
1AliceHR
2BobIT
3CharlieHR
4DavidIT
5EveFinance

我们可以使用 GROUP BY 来统计每个部门的员工数量:

sql
SELECT department, COUNT(employee_id) AS employee_count
FROM employees
GROUP BY department;

输出结果:

departmentemployee_count
HR2
IT2
Finance1

场景 2:计算每个月的销售总额

假设我们有一个 monthly_sales 表,其中包含以下数据:

sale_idmonthamount
1Jan100
2Feb200
3Jan150
4Feb300
5Mar250

我们可以使用 GROUP BY 来计算每个月的销售总额:

sql
SELECT month, SUM(amount) AS total_sales
FROM monthly_sales
GROUP BY month;

输出结果:

monthtotal_sales
Jan250
Feb500
Mar250

5. 总结

GROUP BY 子句是 MySQL 中一个强大的工具,用于对查询结果进行分组和汇总。通过结合聚合函数,我们可以轻松地对数据进行分类和计算。无论是统计每个部门的员工数量,还是计算每个月的销售总额,GROUP BY 都能帮助我们高效地完成任务。

警告

在使用 GROUP BY 时,请确保选择的列要么是分组列,要么是聚合函数的结果。否则,MySQL 会抛出错误。

6. 附加资源与练习

练习 1

创建一个 students 表,包含以下列:student_idnamegrade。编写一个查询,统计每个年级的学生人数。

练习 2

假设你有一个 transactions 表,包含以下列:transaction_iduser_idamount。编写一个查询,计算每个用户的总交易金额。

附加资源