Partilhar via


CONTAGEM (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 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á COUNT expressões como int NULL em metadados, a menos que encapsulado em ISNULL.

  • int NULL quando ANSI_WARNINGS é OFF.

Observações

  • COUNT(*) sem GROUP BY retorna a cardinalidade (número de linhas) no conjunto de resultados. Isso inclui linhas compostas por todos osNULL valores e duplicatas.
  • COUNT(*) com GROUP BY devolve o número de linhas em cada grupo. Isso inclui NULL valores 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

Ver também