Partilhar via


COUNT_BIG (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de Dados SQL no Microsoft Fabric

Esta função devolve o número de itens encontrados num grupo. COUNT_BIG funciona como a função COUNT . Estas funções diferem apenas nos tipos de dados dos seus valores de retorno. COUNT_BIG Devolve sempre um valor de tipo de dado bigint . COUNT devolve sempre um valor de tipo de dado int .

Transact-SQL convenções de sintaxe

Sintaxe

Sintaxe da função de agregação:

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

Sintaxe da função analítica:

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

Arguments

ALL

Aplica a função de agregação a todos os valores. ALL serve como padrão.

DISTINTO

Especifica que COUNT_BIG devolve o número de valores únicos não nulos.

expressão

Uma expressão de qualquer tipo. COUNT_BIG não suporta funções agregadas ou subconsultas em uma expressão.

*

Especifica que COUNT_BIG deve contar todas as linhas para determinar o total de linhas da tabela a devolver. COUNT_BIG(*) não aceita parâmetros e não suporta o uso de DISTINCT. COUNT_BIG(*) não requer um parâmetro de expressão porque, por definição, não usa informações sobre nenhuma coluna em particular. COUNT_BIG(*) devolve o número de linhas numa tabela especificada e preserva as linhas duplicadas. Conta cada linha separadamente, incluindo as linhas que contêm valores nulos.

MAIS ( [ partition_by_clause ] [ order_by_clause ] )

A partition_by_clause divide o conjunto de resultados produzido pela FROM cláusula em partições às quais a COUNT_BIG função é aplicada. Se não especificares o partition_by_clause, a função trata todas as linhas do conjunto de resultados da consulta como um único grupo. O order_by_clause determina a ordem lógica da operação. Para mais informações, consulte a cláusula OVER.

Tipos de devolução

bigint

Observações

COUNT_BIG(*) devolve o número de itens num grupo. Esta contagem inclui NULL valores e duplicados.

COUNT_BIG(ALL <expression>) avalia a expressão para cada linha de um grupo e devolve o número de valores não nulos.

COUNT_BIG(DISTINCT <expression>) avalia a expressão para cada linha de um grupo e devolve o número de valores únicos e não nulos.

Uso determinístico e não determinístico

COUNT_BIG é uma função determinística quando usada sem as OVER cláusulas e ORDER BY .

COUNT_BIG é não determinista quando usada com as OVER cláusulas e ORDER BY .

Usos OVER e ORDER BY cláusulas Determinística
Não Yes
Yes Não

Para obter mais informações, consulte Funções determinísticas e não determinísticas.

Examples

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.

A. Use COUNT_BIG e DISTINCT

Este exemplo devolve o número de cargos diferentes na HumanResources.Employee tabela que um colaborador pode manter.

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

Aqui está o conjunto de resultados.

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

B. Use COUNT_BIG(*)

Este exemplo devolve o número total de funcionários na HumanResources.Employee tabela.

SELECT COUNT_BIG(*)
FROM HumanResources.Employee;
GO

Aqui está o conjunto de resultados.

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

C. Use COUNT_BIG(*) com outros agregados

Este exemplo mostra que COUNT_BIG(*) funciona com outras funções agregadas SELECT na lista.

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

Aqui está o conjunto de resultados.

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

D. Utilize a cláusula OVER

Este exemplo usa as MINfunções , MAX, AVG, e COUNT_BIG com a OVER cláusula para devolver valores agregados para cada departamento na HumanResources.Department tabela.

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;

Aqui está o conjunto de resultados.

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

Exemplos: Azure Synapse Analytics and Analytics Platform System (PDW)

E. Use COUNT_BIG e DISTINCT

Este exemplo retorna o número de títulos diferentes que um funcionário de uma empresa específica pode ter.

USE ssawPDW;
SELECT COUNT_BIG(DISTINCT Title)
FROM dbo.DimEmployee;

Aqui está o conjunto de resultados.

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

F. Use COUNT_BIG(*)

Este exemplo retorna o número total de linhas na dbo.DimEmployee tabela.

USE ssawPDW;
SELECT COUNT_BIG(*)
FROM dbo.DimEmployee;

Aqui está o conjunto de resultados.

-------------
296

G. Use COUNT_BIG(*) com outros agregados

Este exemplo combina COUNT_BIG(*) com outras funções agregadas na SELECT lista. Ele retorna o número de representantes de vendas com uma cota de vendas anual superior a US$ 500.000 e a cota média de vendas desses representantes de vendas.

USE ssawPDW;
SELECT COUNT_BIG(EmployeeKey) AS TotalCount,
       AVG(SalesAmountQuota) AS [Average Sales Quota]
FROM dbo.FactSalesQuota
WHERE SalesAmountQuota > 500000
      AND CalendarYear = 2001;

Aqui está o conjunto de resultados.

TotalCount  Average Sales Quota
----------  -------------------
10          683800.0000

H. Use COUNT_BIG com TER

Este exemplo usa COUNT_BIG com a HAVING cláusula para retornar os departamentos de uma empresa, cada um dos quais tem mais de 15 funcionários.

USE ssawPDW;
SELECT DepartmentName,
       COUNT_BIG(EmployeeKey) AS EmployeesInDept
FROM dbo.DimEmployee
GROUP BY DepartmentName
HAVING COUNT_BIG(EmployeeKey) > 15;

Aqui está o conjunto de resultados.

DepartmentName  EmployeesInDept
--------------  ---------------
Sales           18
Production      179

I. Usa COUNT_BIG com OVER

Este exemplo usa COUNT_BIG com a OVER cláusula para retornar o número de produtos contidos em cada uma das ordens de venda especificadas.

USE ssawPDW;
SELECT DISTINCT COUNT_BIG(ProductKey) OVER (PARTITION BY SalesOrderNumber) AS ProductCount,
                SalesOrderNumber
FROM dbo.FactInternetSales
WHERE SalesOrderNumber IN (N'SO53115', N'SO55981');

Aqui está o conjunto de resultados.

ProductCount   SalesOrderID
------------   -----------------
3              SO53115
1              SO55981