MySQL GROUP BY 子句
在 MySQL 中,GROUP BY
子句用于将查询结果按照一个或多个列进行分组。它通常与聚合函数(如 COUNT
、SUM
、AVG
、MAX
、MIN
等)一起使用,以便对每个分组进行计算。通过 GROUP BY
,我们可以轻松地对数据进行分类和汇总。
1. 基本语法
GROUP BY
子句的基本语法如下:
SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1;
column1
:要分组的列。aggregate_function(column2)
:对分组后的数据进行计算的聚合函数。table_name
:要查询的表。condition
:可选的筛选条件。
2. 示例:按单列分组
假设我们有一个名为 orders
的表,其中包含以下数据:
order_id | customer_id | amount |
---|---|---|
1 | 101 | 100 |
2 | 102 | 200 |
3 | 101 | 150 |
4 | 103 | 300 |
5 | 102 | 250 |
如果我们想按 customer_id
分组,并计算每个客户的订单总金额,可以使用以下查询:
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id;
输出结果:
customer_id | total_amount |
---|---|
101 | 250 |
102 | 450 |
103 | 300 |
在这个例子中,SUM(amount)
计算了每个 customer_id
对应的 amount
列的总和。
3. 示例:按多列分组
GROUP BY
也可以按多列进行分组。例如,假设我们有一个 sales
表,其中包含以下数据:
sale_id | product | region | amount |
---|---|---|---|
1 | A | North | 100 |
2 | B | South | 200 |
3 | A | North | 150 |
4 | B | South | 300 |
5 | A | South | 250 |
如果我们想按 product
和 region
分组,并计算每个产品在每个地区的销售总额,可以使用以下查询:
SELECT product, region, SUM(amount) AS total_sales
FROM sales
GROUP BY product, region;
输出结果:
product | region | total_sales |
---|---|---|
A | North | 250 |
A | South | 250 |
B | South | 500 |
在这个例子中,GROUP BY
按 product
和 region
两列进行分组,SUM(amount)
计算了每个分组的总销售额。
4. 实际应用场景
场景 1:统计每个部门的员工数量
假设我们有一个 employees
表,其中包含以下数据:
employee_id | name | department |
---|---|---|
1 | Alice | HR |
2 | Bob | IT |
3 | Charlie | HR |
4 | David | IT |
5 | Eve | Finance |
我们可以使用 GROUP BY
来统计每个部门的员工数量:
SELECT department, COUNT(employee_id) AS employee_count
FROM employees
GROUP BY department;
输出结果:
department | employee_count |
---|---|
HR | 2 |
IT | 2 |
Finance | 1 |
场景 2:计算每个月的销售总额
假设我们有一个 monthly_sales
表,其中包含以下数据:
sale_id | month | amount |
---|---|---|
1 | Jan | 100 |
2 | Feb | 200 |
3 | Jan | 150 |
4 | Feb | 300 |
5 | Mar | 250 |
我们可以使用 GROUP BY
来计算每个月的销售总额:
SELECT month, SUM(amount) AS total_sales
FROM monthly_sales
GROUP BY month;
输出结果:
month | total_sales |
---|---|
Jan | 250 |
Feb | 500 |
Mar | 250 |
5. 总结
GROUP BY
子句是 MySQL 中一个强大的工具,用于对查询结果进行分组和汇总。通过结合聚合函数,我们可以轻松地对数据进行分类和计算。无论是统计每个部门的员工数量,还是计算每个月的销售总额,GROUP BY
都能帮助我们高效地完成任务。
在使用 GROUP BY
时,请确保选择的列要么是分组列,要么是聚合函数的结果。否则,MySQL 会抛出错误。
6. 附加资源与练习
练习 1
创建一个 students
表,包含以下列:student_id
、name
、grade
。编写一个查询,统计每个年级的学生人数。
练习 2
假设你有一个 transactions
表,包含以下列:transaction_id
、user_id
、amount
。编写一个查询,计算每个用户的总交易金额。