适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统(PDW)
Microsoft Fabric 中的 SQL 分析终结点
Microsoft Fabric 中的仓库
Microsoft Fabric 中的 SQL 数据库
此函数返回组中找到的项数量。
COUNT_BIG 的操作与 COUNT 函数类似。 这些函数区别只在于其返回的值的数据类型。
COUNT_BIG 始终返回“bigint”数据类型值。
COUNT 始终返回“int”数据类型值。
语法
聚合函数语法:
COUNT_BIG ( { [ [ ALL | DISTINCT ] expression ] | * } )
分析函数语法:
COUNT_BIG ( { [ ALL ] expression | * } ) OVER ( [ <partition_by_clause> ] )
参数
ALL
向所有值应用此聚合函数。
ALL 用作默认值。
DISTINCT
指定 COUNT_BIG 返回唯一非 null 值的数目。
expression
任何类型的表达式。
COUNT_BIG 不支持表达式中的聚合函数或子查询。
*
指定 COUNT_BIG 应对所有行计数,以确定要返回的总表行计数。
COUNT_BIG(*) 不采用任何参数,不支持使用 DISTINCT。
COUNT_BIG(*) 不需要“expression”参数,因为根据定义,该函数不使用有关任何特定列的信息。
COUNT_BIG(*) 返回指定表中的行数,但保留副本行。 它会单独为每一行计数,包括包含 null 值的行。
OVER ([ partition_by_clause ] [ order_by_clause ] )
“partition_by_clause”将 FROM 子句生成的结果集划分为要应用 COUNT_BIG 函数的分区。 如果未指定 partition_by_clause,该函数会将查询结果集的所有行视为单个组。 “order_by_clause”确定操作的逻辑顺序。 有关详细信息,请参阅 OVER 子句。
返回类型
bigint
备注
COUNT_BIG(*) 返回组中的项数。 此计数包括 NULL 值和重复项。
COUNT_BIG(ALL <expression>) 计算组中每一行的 表达式 ,并返回非 null 值的数目。
COUNT_BIG(DISTINCT <expression>) 计算组中每一行的 表达式 ,并返回唯一的非 null 值数。
确定性和非确定性用法
COUNT_BIG在不使用 andOVERORDER BY 子句的情况下使用时,是确定性函数。
COUNT_BIG与 and ORDER BY 子句一起使用OVER时是不确定的。
使用 OVER 和 ORDER BY 子句 |
具有确定性 |
|---|---|
| 否 | 是的 |
| 是的 | 否 |
有关详细信息,请参阅确定性函数和不确定性函数。
示例
本文中的代码示例使用 AdventureWorks2025 或 AdventureWorksDW2025 示例数据库,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。
答: 使用 COUNT_BIG 和 DISTINCT
本示例返回员工可以持有的 HumanResources.Employee 表中不同职务的数目。
SELECT COUNT_BIG(DISTINCT JobTitle)
FROM HumanResources.Employee;
GO
结果集如下。
-----------
67
B. 使用 COUNT_BIG\
此示例返回表中的员工 HumanResources.Employee 总数。
SELECT COUNT_BIG(*)
FROM HumanResources.Employee;
GO
结果集如下。
-----------
290
C. 将 COUNT_BIG\ 与其他聚合配合使用
此示例演示 COUNT_BIG(*) 与 SELECT 列表中的其他聚合函数配合使用。
SELECT COUNT_BIG(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
结果集如下。
------ ---------------------
14 3472.1428
D. 使用 OVER 子句
此示例使用包含子句的MIN函数 MAXCOUNT_BIGAVG来返回表中每个部门的HumanResources.Department聚合值。OVER
SELECT DISTINCT d.Name,
MIN(eph.Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary,
MAX(eph.Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary,
AVG(eph.Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary,
COUNT_BIG(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept
FROM HumanResources.EmployeePayHistory AS eph
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON eph.BusinessEntityID = edh.BusinessEntityID
INNER JOIN HumanResources.Department AS d
ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL
ORDER BY d.Name;
结果集如下。
Name MinSalary MaxSalary AvgSalary EmployeesPerDept
---------------------------- ----------- ----------- ----------- -----------------
Document Control 10.25 17.7885 14.3884 5
Engineering 32.6923 63.4615 40.1442 6
Executive 39.06 125.50 68.3034 4
Facilities and Maintenance 9.25 24.0385 13.0316 7
Finance 13.4615 43.2692 23.935 10
Human Resources 13.9423 27.1394 18.0248 6
Information Services 27.4038 50.4808 34.1586 10
Marketing 13.4615 37.50 18.4318 11
Production 6.50 84.1346 13.5537 195
Production Control 8.62 24.5192 16.7746 8
Purchasing 9.86 30.00 18.0202 14
Quality Assurance 10.5769 28.8462 15.4647 6
Research and Development 40.8654 50.4808 43.6731 4
Sales 23.0769 72.1154 29.9719 18
Shipping and Receiving 9.00 19.2308 10.8718 6
Tool Design 8.62 29.8462 23.5054 6
示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
E. 使用 COUNT_BIG 和 DISTINCT
此示例返回特定公司的员工可以保存的不同的标题数。
USE ssawPDW;
SELECT COUNT_BIG(DISTINCT Title)
FROM dbo.DimEmployee;
结果集如下。
-----------
67
F. 使用 COUNT_BIG\
此示例返回 dbo.DimEmployee 表中的总行数。
USE ssawPDW;
SELECT COUNT_BIG(*)
FROM dbo.DimEmployee;
结果集如下。
-------------
296
G. 将 COUNT_BIG\ 与其他聚合配合使用
此示例组合 COUNT_BIG(*) 与 SELECT 列表中的其他聚合函数。 它返回年度销售配额大于 $500,000 的销售代表的人数和这些销售代表的平均销售配额。
USE ssawPDW;
SELECT COUNT_BIG(EmployeeKey) AS TotalCount,
AVG(SalesAmountQuota) AS [Average Sales Quota]
FROM dbo.FactSalesQuota
WHERE SalesAmountQuota > 500000
AND CalendarYear = 2001;
结果集如下。
TotalCount Average Sales Quota
---------- -------------------
10 683800.0000
H. 将COUNT_BIG与 HAVING 配合使用
此示例将 COUNT_BIG 与 HAVING 子句配合使用以返回某家公司的部门,每个部门有超过 15 位员工。
USE ssawPDW;
SELECT DepartmentName,
COUNT_BIG(EmployeeKey) AS EmployeesInDept
FROM dbo.DimEmployee
GROUP BY DepartmentName
HAVING COUNT_BIG(EmployeeKey) > 15;
结果集如下。
DepartmentName EmployeesInDept
-------------- ---------------
Sales 18
Production 179
I. 将COUNT_BIG与 OVER 配合使用
此示例将 COUNT_BIG 与 OVER 子句配合使用,返回指定的每个销售订单中包含的产品数。
USE ssawPDW;
SELECT DISTINCT COUNT_BIG(ProductKey) OVER (PARTITION BY SalesOrderNumber) AS ProductCount,
SalesOrderNumber
FROM dbo.FactInternetSales
WHERE SalesOrderNumber IN (N'SO53115', N'SO55981');
结果集如下。
ProductCount SalesOrderID
------------ -----------------
3 SO53115
1 SO55981