適用於: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 資料類型值。
Transact-SQL 語法慣例 (部分機器翻譯)
語法
聚合函數語法:
COUNT_BIG ( { [ [ ALL | DISTINCT ] expression ] | * } )
解析函數語法:
COUNT_BIG ( { [ ALL ] expression | * } ) OVER ( [ <partition_by_clause> ] )
引數
ALL
將彙總函式套用至所有值。
ALL 作為預設值。
DISTINCT
指定回 COUNT_BIG 傳唯一非空值的數量。
expression
任意類型的運算式。
COUNT_BIG 不支援運算式中的彙總函數或子查詢。
*
指定 COUNT_BIG 應該計算所有資料列,以判斷要傳回的總資料表資料列計數。
COUNT_BIG(*) 不取參數,且不支援使用 DISTINCT。
COUNT_BIG(*) 不需要 expression 參數,因為依照定義,該函數不會使用任何特定資料行的相關資訊。
COUNT_BIG(*) 會傳回指定資料表的資料列數,而且它會保留重複的資料列。 會分開計算每個資料列,包括含有 null 值的資料列。
超過 ( [ 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>) 對群組中的每一列計算 式 ,並回傳非空值的數量。
COUNT_BIG(DISTINCT <expression>) 對群組中的每一列計算 式 ,並回傳唯一且非空值的數量。
確定性與非確定性用法
COUNT_BIG當不使用 OVER and ORDER BY 子句時,是一個確定性函數。
COUNT_BIG當與 和 ORDER BY 子句一起使用OVER時,則是非確定性的。
用途 OVER 與 ORDER BY 條款 |
具決定性 |
|---|---|
| 否 | Yes |
| Yes | 否 |
如需詳細資訊,請參閱確定性與非確定性函式。
範例
本文中的程式代碼範例會使用 AdventureWorks2025 或 AdventureWorksDW2025 範例資料庫,您可以從 Microsoft SQL Server 範例和社群專案 首頁下載。
A。 用 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 子句
此範例使用MINMAX、 、 AVG及COUNT_BIG函數,並搭配OVER子句回傳表格中HumanResources.Department每個部門的彙總值。
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來擁有
此範例會使用 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. 使用帶有 OVER 的 COUNT_BIG
此範例使用 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