Бөлісу құралы:


COUNT_BIG (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsСистема платформы аналитики (PDW)Конечная точка SQL аналитики в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

Эта функция возвращает количество элементов, найденных в группе. Функция COUNT_BIG работает подобно функции COUNT. Эти функции различаются только типами данных в возвращаемых значениях. Функция COUNT_BIG всегда возвращает значение типа данных bigint. Функция COUNT всегда возвращает значение типа данных int.

Соглашения о синтаксисе Transact-SQL

Синтаксис

Синтаксис функции агрегирования:

COUNT_BIG ( { [ [ ALL | DISTINCT ] expression ] | * } )

Синтаксис функции аналитики:

COUNT_BIG ( { [ ALL ] expression | * } ) OVER ( [ <partition_by_clause> ] )

Аргументы

ВСЕ

Применяет агрегатную функцию ко всем значениям. ALL служит значением по умолчанию.

DISTINCT

Указывает, что COUNT_BIG возвращает количество уникальных значений, отличных от NULL.

выражение

Выражение любого типа данных. COUNT_BIG не поддерживает агрегатные функции или вложенные запросы в выражении.

*

Указывает, что функция COUNT_BIG должна учитывать все строки, чтобы определить общее количество строк таблицы для возврата. COUNT_BIG(*) не принимает параметры и не поддерживает использование DISTINCT. COUNT_BIG(*)не требует параметра выражения, так как по определению он не использует сведения о определенном столбце. Функция 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>) вычисляет выражение для каждой строки в группе и возвращает количество уникальных, не допускающих значения NULL.

Детерминированное и недетерминированное использование

COUNT_BIGдетерминированная функция при использовании безOVER предложений и ORDER BY предложений.

COUNT_BIG недетерминирован при использовании сOVER предложениями и ORDER BY предложениями.

Использование OVER и ORDER BY предложения Детерминированный
нет Да
Да нет

Дополнительные сведения см. в разделе детерминированные и недетерминированные функции.

Примеры

Примеры кода в этой статье используют базу данных образца AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.

А. Использование COUNT_BIG и DISTINCT

В этом примере возвращается количество различных названий заданий в HumanResources.Employee таблице, которую может хранить сотрудник.

SELECT COUNT_BIG(DISTINCT JobTitle)
FROM HumanResources.Employee;
GO

Вот результат.

-----------
67

В. Использование COUNT_BIG(*)

В этом примере возвращается общее количество сотрудников в HumanResources.Employee таблице.

SELECT COUNT_BIG(*)
FROM HumanResources.Employee;
GO

Вот результат.

-----------
290

С. Использование COUNT_BIG(*) с другими агрегатами

В этом примере показано, что функция COUNT_BIG(*) работает с другими статистическими функциями в списке SELECT.

SELECT COUNT_BIG(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO

Вот результат.

------ ---------------------
14     3472.1428

D. Использование предложения OVER

В этом примере используется MINпредложение , AVGMAXи 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 и система платформы аналитики (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