SQL Server AVG() 函数

17 Mar 2025 | 4 分钟阅读

SQL Server 中的 AVG() 函数是聚合函数的一部分。 我们使用此函数来计算表达式的平均值。此函数会忽略 NULL 值。 但是,当结果集中没有任何行时,它会返回 NULL。 AVG() 是一个内置函数,通常与 SELECT 语句一起使用。此函数只接受一个参数,该参数可以是列或有效表达式,并返回单个结果以总结输入数据集。它也可以与 WHERE、GROUP BY、ORDER BY 和 HAVING 子句一起使用,以获取过滤后的结果。

语法

以下语法说明了 SQL Server 中的 AVG() 函数

此函数包含以下参数

表达式: 它是必需的表达式,表示用于计算平均值的列名中的非空值。

表名: 这是我们想要从中检索记录的表的名称。 可以指定多个表。

WHERE 条件: 这是一个可选子句,用于定义必须满足才能选择记录的条件。

ALL|DISTINCT: 默认情况下使用 ALL,它指示函数对所有值进行计算。 相比之下,DISTINCT 告诉函数仅获取唯一值。

AVG() 函数示例

让我们借助各种示例来了解 AVG() 函数在 SQL Server 中的工作原理。我们将使用 'employee_info' 表来实际演示 AVERAGE 函数,其中包含以下数据

SQL server avg function

AVERAGE 函数的基本示例

此示例解释了在 SQL Server 中使用 AVERAGE 函数的基本用法。 它返回表达式的平均值,包括 null、非 null 和重复值。 假设我们想要计算表中所有员工的平均工作时长。 我们可以编写如下查询

执行此查询将返回以下输出,显示员工的平均工作时长

SQL server avg function

带有 WHERE 子句的 AVERAGE 函数

SQL Server 使用 WHERE 子句来过滤表中的记录。 此示例将使用带有 AVG() 函数的 WHERE 子句来获取职业为作家的员工的平均工作时长

当我们执行该查询时,我们看到作家的平均工作时长为 11 小时

SQL server avg function

带有 GROUP BY 子句的 AVERAGE 函数

SQL Server 使用 GROUP BY 子句将具有相同值的行分组到汇总行中。我们使用此子句是因为它会生成汇总报告以制定进一步的策略。 以下查询将使用 AVG() 函数返回表中每个职业的员工总工作时长

执行该查询将返回与每个职业相关的员工的平均工作时长

SQL server avg function

如果我们尝试在 SELECT 语句中组合聚合和非聚合列,我们将收到一个错误。这是错误消息

SQL server avg function

带有 ORDER BY 子句的 AVERAGE 函数

SQL Server 使用 ORDER BY 子句按升序或降序对表进行排序。 以下示例将使用带有 ORDER BY 子句的 AVG() 函数,计算与每个职业相关的员工的平均工作时长,然后按聚合平均值的降序对结果集进行排序

执行该语句将根据聚合平均值按降序显示结果

SQL server avg function

带有 HAVING 子句的 AVERAGE 函数

SQL Server 使用 HAVING 子句过滤分组后的行,并且此子句始终需要 GROUP BY 子句才能生成输出。 以下示例将使用带有 AVG() 函数的 HAVING 子句。它计算每个职业的员工的平均工作时长,然后检查聚合平均值是否大于 10。如果为真,则相应的结果以聚合平均值的升序返回

执行该语句将返回职业中平均工作时长大于 10 的员工

SQL server avg function

带有 DISTINCT 子句的 AVERAGE 函数

SQL Server 使用 DISTINCT 关键字从表中删除重复数据。假设我们想要计算 employee_info 表中每个职业的唯一员工的总工作时长。 我们可以编写如下查询来获取这些数据

执行该查询将返回以下结果,显示表中每个职业的唯一员工的工作时长

SQL server avg function

结论

本文将全面解释如何在 SQL Server 中使用 AVG() 函数以及何时使用。 此函数仅适用于数值数据类型。 在这里,我们讨论了基于 AVERAGE 函数的几个用例的各种示例,例如如何使用 WHERE、GROUP BY、ORDER BY 和 HAVING 子句获取表中员工的平均工作时长。