SQL Server HAVING

2025年3月17日 | 阅读 3 分钟

SQL Server 中的 HAVING 子句用于指定组或聚合的搜索条件。 它只能与 SELECT 语句 一起使用,并且通常与 GROUP BY 子句 一起使用。 它使我们能够过滤在结果中显示的组结果。 我们使用此子句代替 WHERE 子句,因为它对 GROUP BY 子句创建的组设置条件,而 WHERE 子句对选定的列设置条件。

SQL 中的每个 HAVING 条件都可以将一个组列或聚合表达式与另一个组聚合表达式或常量进行比较。 我们可能使用 HAVING 对组列表中列值和聚合值都设置条件。

HAVING 子句的优势

HAVING 子句验证组的方式与 WHERE 子句验证单个行的方式相同。 使用 HAVING 子句的主要好处是聚合可以包含在搜索条件中,而聚合不能在 WHERE 子句的搜索条件中使用。

语法

以下是 SQL Server 中 HAVING 子句的基本语法

下面解释了上述语法的参数描述

  • 首先,我们将 选择结果中我们想要的列名。 在这里,我们还可以指定聚合函数,例如 SUM、COUNT、MIN、MAX 或 AVG。
  • 其次,我们将 写出表名, 从该表中选择列。
  • 第三,我们使用 GROUP BY 子句 将行汇总成组。
  • 第四,我们将 HAVING 子句 与一个或多个条件一起使用,以对 GROUP BY 子句评估的组进行评估。 最终结果只包含那些满足条件评估为 TRUE 的组。 如果条件被判断为 FALSEUNKNOWN, 则过滤掉这些组。

HAVING 子句示例

让我们通过示例来理解 HAVING 子句,这些示例帮助我们将其与不同的 SQL 聚合函数一起使用。 假设我们有一个名为 employees_info 的表,其中包含以下数据

SQL Server HAVING

我们将使用此表来演示 HAVING 子句与不同的示例。

示例 1: 下面的查询将使用 SUM 函数与 HAVING 子句。 它将返回员工姓名及其工作小时数的总和,这些小时数超过 6 小时

执行查询将返回以下输出

SQL Server HAVING

示例 2: 下面的查询将使用 COUNT 函数与 HAVING 子句。 此语句计算那些工资大于 30000 的员工的工作小时数

执行该语句将返回以下输出

SQL Server HAVING

示例 3: 下面的查询将使用 MIN 函数与 HAVING 子句。 它将返回每个员工的最小工作小时数,并且最小工作小时数大于 10。

执行该语句将返回以下输出,我们可以在其中看到员工姓名及其最小工作小时数

SQL Server HAVING

示例 4: 下面的查询将使用 MAX 函数与 HAVING 子句。 它将返回每个员工的最大工作小时数,并且最大工作小时数小于 12。

执行该语句将返回以下输出,我们可以在其中看到员工姓名及其最大工作小时数小于 12

SQL Server HAVING

示例 5: 下面的查询将使用 AVERAGE 函数与 HAVING 子句。 它将返回平均工资大于或等于 30000 的职业名称。

执行该语句将返回以下输出

SQL Server HAVING

本文将介绍 HAVING 子句,它与 WHERE 子句的区别,以及它如何与聚合函数 SUM、COUNT、MAX、MIN 和 AVERAGE 一起工作。


下一话题SQL Server 选择