COUNT_BIG(Transact-SQL)

適用於:SQL ServerAzure 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(*) 不取參數,且不支援使用 DISTINCTCOUNT_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時,則是非確定性的

用途 OVERORDER BY 條款 具決定性
Yes
Yes

如需詳細資訊,請參閱確定性與非確定性函式

範例

本文中的程式代碼範例會使用 AdventureWorks2025AdventureWorksDW2025 範例資料庫,您可以從 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、 、 AVGCOUNT_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_BIGHAVING 子句,以便傳回公司中員工數超過 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_BIGOVER 子句,以便傳回每個指定銷售訂單中包含的產品數目。

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