11 MySQL数据库聚合函数之GROUP BY与HAVING
在上一篇中,我们详细探讨了MySQL的聚合函数,如 COUNT
、AVG
、SUM
、MIN
和 MAX
。这些函数能够帮助我们从数据中提取有价值的信息,而在处理复杂查询时,GROUP BY
和 HAVING
则是不可或缺的工具。本篇教程将专注于这两个关键字的使用,帮助大家更加深入地理解它们在数据聚合中的重要性。
1. GROUP BY 基础
GROUP BY
语句用于将结果集中的行分组,并对每个组应用聚合函数。这使得我们能够在每个组范围内进行汇总计算。
1.1 GROUP BY 语法
基本的语法结构如下:
1 | SELECT column1, aggregate_function(column2) |
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 | SELECT product, SUM(quantity) AS total_quantity |
1.3 结果
执行上述查询后,你将得到如下结果:
product | total_quantity |
---|---|
A | 25 |
B | 15 |
C | 20 |
这样,我们成功地按 product
列对数据进行了分组,并计算了每个产品的总销售数量。
2. HAVING 子句
HAVING
子句通常在 GROUP BY
后面使用,用于对聚合结果进行筛选。与 WHERE
不同,HAVING
主要用于过滤聚合后的结果。
2.1 HAVING 语法
基本的语法结构如下:
1 | SELECT column1, aggregate_function(column2) |
2.2 示例
继续使用上面的 sales
表,如果我们只希望查看总销售数量大于 20 的产品,可以使用如下 SQL 查询:
1 | SELECT product, SUM(quantity) AS total_quantity |
2.3 结果
执行上述查询后,你将得到如下结果:
product | total_quantity |
---|---|
A | 25 |
在这个例子中,只有产品 A 的销售数量大于 20,因此只有这一行被返回。
3. GROUP BY 和 HAVING 综合案例
让我们通过一个结合 GROUP BY
和 HAVING
的实际案例来巩固这些概念。假设我们有以下一个表 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 | SELECT department, AVG(salary) AS avg_salary |
结果分析
执行该查询后,得到的结果将是:
department | avg_salary |
---|---|
IT | 8250 |
Sales | 6250 |
在这个例子中,我们首先按部门分组,然后计算每个部门的平均工资,最后使用 HAVING
子句筛选出平均工资大于 6000 的部门。
4. 总结
通过本篇教程,我们深入探讨了 GROUP BY
和 HAVING
的用法,它们在数据汇总和筛选中发挥了重要作用。理解这两个概念,将提升你使用 MySQL 进行数据分析的能力。
在下一篇教程中,我们将转向数据表管理,讨论如何创建、修改与删除表。这将为你后续的数据库操作打下坚实的基础。希望大家在学习与实践中不断进步!
11 MySQL数据库聚合函数之GROUP BY与HAVING