Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Esta função retorna o número de itens encontrados em um grupo.
COUNT funciona como a função COUNT_BIG . Essas funções diferem apenas nos tipos de dados de seus valores de retorno.
COUNT Sempre retorna um valor de tipo de dados int .
COUNT_BIG sempre retorna um valor de tipo de dados bigint .
Transact-SQL convenções de sintaxe
Sintaxe
Sintaxe da função de agregação
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
Sintaxe da função analítica
COUNT ( [ ALL ] { expression | * } ) OVER ( [ <partition_by_clause> ] )
Argumentos
TODOS
Aplica a função de agregação a todos os valores. ALL serve como padrão.
DISTINTO
Especifica que COUNT retorna o número de valores não nulos exclusivos.
expressão
Uma expressão de qualquer tipo, exceto imagem, ntext ou texto.
COUNT não suporta funções agregadas ou subconsultas em uma expressão.
*
Especifica que COUNT deve contar todas as linhas para determinar a contagem total de linhas da tabela a ser retornada.
COUNT(*) não usa parâmetros e não suporta o uso de DISTINCT.
COUNT(*) não requer um parâmetro de expressão porque, por definição, não usa informações sobre nenhuma coluna em particular.
COUNT(*) Retorna o número de linhas em uma tabela especificada e preserva linhas duplicadas. Ele conta cada linha separadamente. Isso inclui linhas que contêm valores nulos.
MAIS ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ] )
O partition_by_clause divide o conjunto de resultados produzido pela FROM cláusula em partições às quais a COUNT função é aplicada. Se não for especificada, 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. Consulte a cláusula OVER (Transact-SQL) para obter mais informações.
Tipos de devolução
int NOT NULL quando
ANSI_WARNINGSéON, no entanto, o SQL Server sempre trataráCOUNTexpressões comoint NULLem metadados, a menos que encapsulado emISNULL.int NULL quando
ANSI_WARNINGSéOFF.
Observações
-
COUNT(*)semGROUP BYretorna a cardinalidade (número de linhas) no conjunto de resultados. Isso inclui linhas compostas por todos osNULLvalores e duplicatas. -
COUNT(*)comGROUP BYdevolve o número de linhas em cada grupo. Isso incluiNULLvalores e duplicatas. -
COUNT(ALL <expression>)Avalia a expressão para cada linha de um grupo e retorna o número de valores não nulos. -
COUNT(DISTINCT <expression>)Avalia a expressão para cada linha de um grupo e retorna o número de valores exclusivos e não nulos.
COUNT é uma função determinística quando usada sem as cláusulas OVER e ORDER BY. É não determinístico quando usado com as cláusulas OVER e ORDER BY. Para obter mais informações, consulte Funções determinísticas e não determinísticas.
ARITHABORT e ANSI_WARNINGS
Quando COUNT tem um valor de retorno excedendo o valor máximo de int (ou seja, 231-1 ou 2.147.483.647), a COUNT função falhará devido a um estouro de inteiro. Quando COUNT os transbordamentos e asARITHABORTANSI_WARNINGS opções forem OFF, COUNT retornarão NULL. Caso contrário, quando um dos ou ARITHABORT forem ANSI_WARNINGS, a consulta será abortada e o erro ON de Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int. estouro aritmético será gerado. Para lidar corretamente com esses resultados grandes, use COUNT_BIG em vez disso, que retorna bigint.
Quando ambos ARITHABORT e ANSI_WARNINGS são ON, você pode envolver COUNT com segurança sites de chamada para ISNULL( <count-expr>, 0 ) coagir o tipo da expressão para int NOT NULL em vez de int NULL. Envolver COUNT significa ISNULL que qualquer erro de estouro será silenciosamente suprimido, o que deve ser considerado para correção.
Exemplos
Um. Use COUNT e DISTINCT
Este exemplo retorna o número de títulos diferentes que um funcionário da Adventure Works Cycles pode manter.
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO
Aqui está o conjunto de resultados.
-----------
67
(1 row(s) affected)
B. Usar COUNT(*)
Este exemplo retorna o número total de funcionários do Adventure Works Cycles.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Aqui está o conjunto de resultados.
-----------
290
(1 row(s) affected)
C. Use COUNT(*) com outros agregados
Este exemplo mostra que COUNT(*) funciona com outras funções agregadas SELECT na lista. O exemplo utiliza a base de dados AdventureWorks2025.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Aqui está o conjunto de resultados.
----------- ---------------------
14 3472.1428
(1 row(s) affected)
D. Utilize a cláusula OVER
Este exemplo usa , MINMAX, AVG e COUNT funciona com a OVER cláusula para devolver valores agregados para cada departamento na tabela da base de dados HumanResources.Department AdventureWorks2025.
SELECT DISTINCT Name
, MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary
, MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary
, AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary
, COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept
FROM HumanResources.EmployeePayHistory AS eph
JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON eph.BusinessEntityID = edh.BusinessEntityID
JOIN HumanResources.Department AS d
ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL
ORDER BY 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
(16 row(s) affected)
Exemplos: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Use COUNT 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(DISTINCT Title)
FROM dbo.DimEmployee;
Aqui está o conjunto de resultados.
-----------
67
F. Usar COUNT(*)
Este exemplo retorna o número total de linhas na dbo.DimEmployee tabela.
USE ssawPDW;
SELECT COUNT(*)
FROM dbo.DimEmployee;
Aqui está o conjunto de resultados.
-------------
296
G. Use COUNT(*) com outros agregados
Este exemplo combina COUNT(*) 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(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 CONTAR com TER
Este exemplo usa COUNT 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(EmployeeKey)AS EmployeesInDept
FROM dbo.DimEmployee
GROUP BY DepartmentName
HAVING COUNT(EmployeeKey) > 15;
Aqui está o conjunto de resultados.
DepartmentName EmployeesInDept
-------------- ---------------
Sales 18
Production 179
Eu. Use COUNT com OVER
Este exemplo usa COUNT 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(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