SQL Server COUNT() 函数

17 Mar 2025 | 5 分钟阅读

SQL Server 中的 COUNT() 函数是聚合函数的一部分,**用于计算表中存在的总行数**。当结果集中没有任何行时,它返回 **NULL**。 它通常与 SELECT 语句一起使用,其返回类型为 **INT**。

COUNT() 是一个内置函数,它接受一个参数,该参数可以是列或有效表达式,并返回一个结果来汇总输入数据集。 此函数不会忽略 NULL 值,因为它在计算查询结果时也会考虑它们。 它还可以与 WHERE、GROUP BY、ORDER BY 和 HAVING 子句一起使用以获得过滤后的结果。

语法

以下给出了 SQL Server 中 COUNT() 函数的语法

此函数包含以下参数

**表达式:** 它是表示将计算其非空值的列名称的必需表达式。

**table_name(s):** 它指示我们要从中检索记录的表的名称。可以指定多个表。

**WHERE 条件:** 这是一个可选子句,用于定义应满足要选择的记录的条件。

SQL Server 允许我们使用以下三种形式的 count 函数

  1. **COUNT(*):** 它与 SELECT 语句一起使用,以获取结果集中存在的总行数。结果集可以包含非空、空和重复行。
  2. **COUNT(ALL expression):** 此函数用于获取表中存在的总行数,而不包含空行。
  3. **COUNT(DISTINCT expression):** 此函数用于仅计算表中存在的唯一行数,而不包含空值。

COUNT() 函数示例

让我们借助各种示例来了解 COUNT() 函数在 SQL Server 中的工作方式。 我们将使用“**employee_info**”表来实际演示 COUNT 函数。 该表包含以下数据

SQL server count function

COUNT 函数的基本示例

此示例解释了 COUNT 函数的基本用法。 它显示表中存在的总行数,包括空值、非空值和重复值。 假设我们要计算给定表中列出的员工总数。 我们可以编写如下查询

执行查询将返回以下输出

SQL server count function

带有 DISTINCT 子句的 COUNT 函数

DISTINCT 关键字**仅考虑表中的唯一数据**。 假设我们要计算 employee_info 表中列出的唯一员工总数。 我们可以编写如下查询来执行相同的操作

执行查询将返回以下输出,该输出仅显示表中的唯一员工数

SQL server count function

这是另一个示例,它使用 COUNT(expression) 函数来计算 employee_info 表中非空值的总数

由于未找到 NULL 记录,因此该语句将计算所有员工

SQL server count function

带有 WHERE 子句的 COUNT 函数

WHERE 子句用于**过滤表中的记录**。 本示例将 WHERE 子句与 COUNT() 函数一起使用,以返回工资低于 50000 且工作时间大于 9 的员工总数。

当我们执行查询时,我们看到七名员工的工资低于 50000 且工作时间大于 9

SQL server count function

带有 GROUP BY 子句的 COUNT 函数

GROUP BY 子句用于**将具有相同值的行分组**到摘要行中。 它在聚合函数中非常有用,可以生成摘要报告。 以下查询将使用 COUNT() 函数**计算每个职业的员工总数:**

执行查询将返回与每个职业关联的员工人数

SQL server count function

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

SQL server count function

带有 ORDER BY 子句的 COUNT 函数

ORDER BY 子句允许我们**按升序或降序显示表**。 以下示例将使用带有 ORDER BY 子句的 COUNT() 函数,计算每个职业的员工总数,然后根据员工人数按升序对结果集进行排序

执行语句将按员工人数的升序显示结果

SQL server count function

带有 HAVING 子句的 COUNT 函数

HAVING 子句用于**过滤分组行**。 我们必须将 GROUP BY 子句与 HAVING 子句一起使用。 本示例将 HAVING 子句与 COUNT() 函数一起使用。 它计算每个职业的员工人数,然后检查聚合计数是否大于 1。 如果为真,则相应的记录将按员工人数的升序返回

执行该语句将返回每个职业中大于 1 的员工人数

SQL server count function

带有 OVER() 的 COUNT 函数

OVER() 子句确定查询中的哪些行应用于该函数,函数评估它们的顺序以及何时应重新启动函数的计算。 以下查询提供了 **employee_info** 表中每个职业的员工的累积总数,并按升序组织输出

执行查询将返回以下结果

SQL server count function

COUNT() 与 COUNT_BIG() 函数有何不同?

SQL Server 中的 COUNT 和 COUNT_BIG 函数本质上做的是同一件事,即计算表中存在的项目数。 但有时我们会根据应用程序在它们之间做出选择。 在这种情况下,我们可能会根据数据类型选择最适合应用程序的函数。

COUNT() 函数**将结果作为 INT 返回**,而 COUNT_BIG() 函数**将结果作为 BIGINT 数据类型返回**。 因此,如果我们有一个包含数百万条记录的表,并且我们需要获取这些记录的计数,则 COUNT() 函数会给出错误,但 COUNT_BIG() 函数会显示这样的结果。

它们之间的另一个主要区别是在视图上创建索引时。 COUNT() 不允许在视图上创建聚集索引。 但是,当我们使用 COUNT_BIG() 函数时,我们可以在视图上创建聚集索引。

结论

本文将解释如何以及何时在 SQL Server 中使用 COUNT() 函数的完整概述。 我们在使用此函数时必须小心,因为它仅适用于数字数据类型。 在这里,我们讨论了基于 COUNT 函数的几个用例的各种示例,例如如何使用 WHERE、GROUP BY、HAVING 和 OVER 子句获取表中存在的项目总数。