11 MySQL数据库聚合函数之GROUP BY与HAVING

在上一篇中,我们详细探讨了MySQL的聚合函数,如 COUNTAVGSUMMINMAX。这些函数能够帮助我们从数据中提取有价值的信息,而在处理复杂查询时,GROUP BYHAVING 则是不可或缺的工具。本篇教程将专注于这两个关键字的使用,帮助大家更加深入地理解它们在数据聚合中的重要性。

1. GROUP BY 基础

GROUP BY 语句用于将结果集中的行分组,并对每个组应用聚合函数。这使得我们能够在每个组范围内进行汇总计算。

1.1 GROUP BY 语法

基本的语法结构如下:

1
2
3
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;

1.2 示例

以一个名为 sales 的表为例,该表结构如下:

id product quantity price
1 A 10 5.00
2 B 5 10.00
3 A 15 5.00
4 C 20 7.50
5 B 10 10.00

我们想要计算每种产品的总销售数量。可以使用以下 SQL 查询:

1
2
3
SELECT product, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product;

1.3 结果

执行上述查询后,你将得到如下结果:

product total_quantity
A 25
B 15
C 20

这样,我们成功地按 product 列对数据进行了分组,并计算了每个产品的总销售数量。

2. HAVING 子句

HAVING 子句通常在 GROUP BY 后面使用,用于对聚合结果进行筛选。与 WHERE 不同,HAVING 主要用于过滤聚合后的结果。

2.1 HAVING 语法

基本的语法结构如下:

1
2
3
4
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;

2.2 示例

继续使用上面的 sales 表,如果我们只希望查看总销售数量大于 20 的产品,可以使用如下 SQL 查询:

1
2
3
4
SELECT product, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product
HAVING total_quantity > 20;

2.3 结果

执行上述查询后,你将得到如下结果:

product total_quantity
A 25

在这个例子中,只有产品 A 的销售数量大于 20,因此只有这一行被返回。

3. GROUP BY 和 HAVING 综合案例

让我们通过一个结合 GROUP BYHAVING 的实际案例来巩固这些概念。假设我们有以下一个表 employees,其结构如下:

id department salary
1 HR 6000
2 IT 8000
3 IT 8500
4 HR 5000
5 Sales 7000
6 Sales 5500

我们希望计算每个部门的平均工资,并只选择平均工资大于 6000 的部门。可以使用以下 SQL 查询:

1
2
3
4
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING avg_salary > 6000;

结果分析

执行该查询后,得到的结果将是:

department avg_salary
IT 8250
Sales 6250

在这个例子中,我们首先按部门分组,然后计算每个部门的平均工资,最后使用 HAVING 子句筛选出平均工资大于 6000 的部门。

4. 总结

通过本篇教程,我们深入探讨了 GROUP BYHAVING 的用法,它们在数据汇总和筛选中发挥了重要作用。理解这两个概念,将提升你使用 MySQL 进行数据分析的能力。

在下一篇教程中,我们将转向数据表管理,讨论如何创建、修改与删除表。这将为你后续的数据库操作打下坚实的基础。希望大家在学习与实践中不断进步!

11 MySQL数据库聚合函数之GROUP BY与HAVING

https://zglg.work/mysql-database-zero/11/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论