MySQL HAVING 子句

2025年8月18日 | 4 分钟阅读

MySQL HAVING 子句与 GROUP BY 子句一起使用。它总是返回条件为 TRUE 的行。

它主要用于基于组合值(如 sum、average、count 等)进行数据过滤。简而言之,它的作用类似于 WHERE 子句,但用于聚合数据。在使用 GROUP BY 创建的组上工作时,HAVING 子句允许您应用条件,评估每个组,并包含那些满足标准的组。当排除 GROUP BY 时,HAVING 子句的作用类似于 WHERE。

在本文中,我们将详细阐述 MySQL HAVING 子句的概念及其各种工作示例。

语法

参数

aggregate_function: 指定任何一个聚合函数,如 SUM、COUNT、MIN、MAX 或 AVG。

expression1, expression2, ... expression_n: 指定未被聚合函数封装的表达式,并且必须包含在 GROUP BY 子句中。

WHERE conditions: 可选。指定要选择的记录的条件。

HAVING condition: 用于限制返回的行组。它仅在结果集中显示条件为 TRUE 的组。

HAVING 子句与 SUM 函数

考虑一个名为“employees”的表,其中包含以下数据。

MySQL having clause

在这里,我们使用 SUM 函数和 HAVING 子句来返回 emp_name 和他们的工作小时数总和。

执行以下查询

简化:在上面的例子中,我们可以理解如何使用 HAVING 子句与 SUM 聚合函数。在这里,我们找到所有工作小时数大于 5 的 emp_name。这可以通过将每个员工的工作小时数相加来计算。

Output: 此示例的输出如下。

MySQL having clause

同样,它也可以与 COUNT、MIN、MAX 和 AVG 函数一起使用。

示例 1:将 having 子句与 AVG 聚合函数一起使用

Output: 下面是此示例的输出。

姓名平均工作小时数
Ajeet12
Ayan10
Milan9
Ruchi6

解释:在上面的例子中,我们将能够理解 HAVING 子句与 AVG 聚合函数。

以 Teacher 表为例来执行 MIN 和 MAX 函数。

TIDT_Name资格验证 (Qualification)薪金
T101AnshuBCA25000
T 201HarshitaMCA35000
T 301拉曼 (Raman)Mtech45000
T 401RubyBCA22000
T 501SumanMCA32000

示例 1:将 having 子句与 MIN 聚合函数一起使用

让我们通过一个例子来理解如何使用 HAVING 子句与 MIN 聚合函数。假设我们有教师 ID 分组的教师最低工资低于 45000 的数据。

Output: 下面是此示例的输出。

解释:在给定的例子中,我们将能够理解如何使用 HAVING 子句以及 MIN 聚合函数。

TIDT_Name最高工资
T101Anshu25000
T 201Harshita35000
T 301拉曼 (Raman)45000
T 401Ruby22000
T 501Suman32000

示例 2:将 having 子句与 MAX 聚合函数一起使用

让我们以一个例子来说明如何使用 HAVING 子句与 MAX 聚合函数。假设我们有教师 ID 分组的教师最高工资高于 20000 的数据。

Output: 下面是此示例的输出。

解释:在上面的例子中,我们将理解如何使用 HAVING 子句以及 MIN 聚合函数。

TIDT_Name最高工资
T101Anshu25000
T 201Harshita35000
T 401Ruby22000
T 501Suman32000

关于 MySQL HAVING 子句的一些常见问题列表

1. 列出定义 MySQL HAVING 子句时的一些关键规则?

答案:以下是在 MySQL 中定义 having 子句时的一些规则。

  • 当基于聚合数据过滤结果时,使用 HAVING 子句,而不是用于行级过滤。
  • 它与 GROUP BY 子句结合使用。
  • 通过使用 GROUP BY 子句中包含的列上的索引,确保查询的高效执行。
  • Having 条件应简单易于维护性能和可读性。

2. HAVING 和 WHERE 子句之间有什么区别?

答案:以下是 MySQL 中 HAVING 和 WHERE 子句之间的一些区别。

序号Having 子句Where 子句
1.它会检查一组行的条件。它会单独检查或执行每一行。
2.它只能与聚合函数一起使用。它不能与聚合函数一起使用。
3.它在 Group By 子句之后执行。它在 Group By 子句之前执行。

3. 为什么我们需要 MySQL 中的 HAVING 子句?

答案:在 MySQL 中,HAVING 子句主要用于基于聚合函数过滤数据。它与 GROUP BY 子句一起使用,用于过滤满足指定条件的组。它有助于从大量数据中生成摘要报告。


下一个主题MySQL Grant Privilege