COUNT (Transact-SQL)COUNT (Transact-SQL)

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database SíInstancia administrada de Azure SQLAzure SQL Managed InstanceYesInstancia administrada de Azure SQLAzure SQL Managed Instance síAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics síAlmacenamiento de datos paralelosParallel Data WarehouseyesAlmacenamiento de datos paralelosParallel Data WarehouseSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database SíInstancia administrada de Azure SQLAzure SQL Managed InstanceYesInstancia administrada de Azure SQLAzure SQL Managed Instance síAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics síAlmacenamiento de datos paralelosParallel Data WarehouseyesAlmacenamiento de datos paralelosParallel Data Warehouse

Esta función devuelve el número de elementos encontrados en un grupo.This function returns the number of items found in a group. COUNT funciona como la función COUNT_BIG.COUNT operates like the COUNT_BIG function. Estas funciones difieren solo en los tipos de datos de sus valores devueltos.These functions differ only in the data types of their return values. COUNT siempre devuelve un valor de tipo de datos int.COUNT always returns an int data type value. COUNT_BIG siempre devuelve un valor de tipo de datos bigint.COUNT_BIG always returns a bigint data type value.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax


-- Aggregation Function Syntax  
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )  

-- Analytic Function Syntax  
COUNT ( [ ALL ]  { expression | * } ) OVER ( [ <partition_by_clause> ] )  

Nota

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumentosArguments

ALLALL
Aplica la función de agregado a todos los valores.Applies the aggregate function to all values. ALL sirve como valor predeterminado.ALL serves as the default.

DISTINCTDISTINCT
Especifica que COUNT devuelva el número de valores únicos no NULL.Specifies that COUNT returns the number of unique nonnull values.

expressionexpression
Es una expresión de cualquier tipo excepto image, ntext o text.An expression of any type, except image, ntext, or text. Tenga en cuenta que COUNT no admite funciones de agregado ni subconsultas en una expresión.Note that COUNT does not support aggregate functions or subqueries in an expression.

*
Especifica que COUNT debe contar todas las filas para determinar el total de filas de la tabla a devolver.Specifies that COUNT should count all rows to determine the total table row count to return. COUNT(*) no toma ningún parámetro y no admite el uso de DISTINCT.COUNT(*) takes no parameters and does not support the use of DISTINCT. COUNT(*) no requiere el parámetro expression porque, por definición, no usa información sobre ninguna columna concreta.COUNT(*) does not require an expression parameter because by definition, it does not use information about any particular column. COUNT(*) devuelve el número de filas de una tabla especificada y conserva las filas duplicadas.COUNT(*) returns the number of rows in a specified table, and it preserves duplicate rows. Cuenta cada fila por separado.It counts each row separately. Esto incluye las filas que contienen valores NULL.This includes rows that contain null values.

OVER ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ] )OVER ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ] )
partition_by_clause divide el conjunto de resultados generado por la cláusula FROM en particiones a las que se aplica la función COUNT.The partition_by_clause divides the result set produced by the FROM clause into partitions to which the COUNT function is applied. Si no se especifica, la función trata todas las filas del conjunto de resultados de la consulta como un único grupo.If not specified, the function treats all rows of the query result set as a single group. order_by_clause determina el orden lógico de la operación.The order_by_clause determines the logical order of the operation. Para más información, consulte Cláusula OVER (Transact-SQL).See OVER Clause (Transact-SQL) for more information.

Tipos de valores devueltosReturn types

intint

ObservacionesRemarks

COUNT(*) devuelve el número de elementos de un grupo.COUNT(*) returns the number of items in a group. Esto incluye los valores NULL y los duplicadosThis includes NULL values and duplicates.

COUNT(ALL expresión) evalúa expresión en todas las filas del grupo y devuelve el número de valores no NULL.COUNT(ALL expression) evaluates expression for each row in a group, and returns the number of nonnull values.

COUNT(DISTINCT expresión) evalúa expresión en todas las filas del grupo y devuelve el número de valores únicos no NULL.COUNT(DISTINCT expression) evaluates expression for each row in a group, and returns the number of unique, nonnull values.

Para valores devueltos superiores a 2^31-1, COUNT devuelve un error.For return values exceeding 2^31-1, COUNT returns an error. En estos casos, utilice COUNT_BIG en su lugar.For these cases, use COUNT_BIG instead.

COUNT es una función determinista cuando se utiliza *sin _ las cláusulas OVER y ORDER BY.COUNT is a deterministic function when used *without _ the OVER and ORDER BY clauses. Es no determinista cuando se usa _ con* las cláusulas OVER y ORDER BY.It is nondeterministic when used _ with* the OVER and ORDER BY clauses. Para más información, consulte Funciones deterministas y no deterministas.See Deterministic and Nondeterministic Functions for more information.

EjemplosExamples

A.A. Usar COUNT y DISTINCTUsing COUNT and DISTINCT

Este ejemplo se muestra el número de diferentes cargos que puede tener un empleado de Adventure Works CyclesAdventure Works Cycles.This example returns the number of different titles that an Adventure Works CyclesAdventure Works Cycles employee can hold.

SELECT COUNT(DISTINCT Title)  
FROM HumanResources.Employee;  
GO  

El conjunto de resultados es el siguiente:Here is the result set.

-----------
67  
  
(1 row(s) affected)

B.B. Usar COUNT(*)Using COUNT(*)

Este ejemplo devuelve el número total de empleados de Adventure Works CyclesAdventure Works Cycles.This example returns the total number of Adventure Works CyclesAdventure Works Cycles employees.

SELECT COUNT(*)  
FROM HumanResources.Employee;  
GO  

El conjunto de resultados es el siguiente:Here is the result set.

-----------
290  
  
(1 row(s) affected)

C.C. Usar COUNT(*) con otros agregadosUsing COUNT(*) with other aggregates

En este ejemplo se muestra que COUNT(*) funciona con otras funciones agregadas en la lista SELECT.This example shows that COUNT(*) works with other aggregate functions in the SELECT list. En el ejemplo se usa la base de datos AdventureWorks2012AdventureWorks2012.The example uses the AdventureWorks2012AdventureWorks2012 database.

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

El conjunto de resultados es el siguiente:Here is the result set.

----------- ---------------------
14            3472.1428
  
(1 row(s) affected)

D.D. Usar la cláusula OVERUsing the OVER clause

En este ejemplo se utilizan las funciones MIN, MAX, AVG y COUNT con la cláusula OVER para devolver valores agregados para cada departamento en la tabla AdventureWorks2012AdventureWorks2012 de la base de datos HumanResources.Department.This example uses the MIN, MAX, AVG and COUNT functions with the OVER clause, to return aggregated values for each department in the AdventureWorks2012AdventureWorks2012 database HumanResources.Department table.

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;  

El conjunto de resultados es el siguiente:Here is the result set.

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)

Ejemplos: Azure Synapse AnalyticsAzure Synapse Analytics y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Almacenamiento de datos paralelosParallel Data Warehouse

E.E. Usar COUNT y DISTINCTUsing COUNT and DISTINCT

Este ejemplo se muestra el número de diferentes cargos que puede tener un empleado de una empresa concreta.This example returns the number of different titles that an employee of a specific company can hold.

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

El conjunto de resultados es el siguiente:Here is the result set.

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

F.F. Usar COUNT(*)Using COUNT(*)

Este ejemplo devuelve el número total de filas de la tabla dbo.DimEmployee.This example returns the total number of rows in the dbo.DimEmployee table.

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

El conjunto de resultados es el siguiente:Here is the result set.

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

G.G. Usar COUNT(*) con otros agregadosUsing COUNT(*) with other aggregates

Este ejemplo combina COUNT(*) con otras funciones de agregado en la lista SELECT.This example combines COUNT(*) with other aggregate functions in the SELECT list. Devuelve el número de los representantes de ventas con una cuota de ventas anual superior a 500 000 dólares y el promedio de cuota de ventas de dichos representantes.It returns the number of sales representatives with an annual sales quota greater than $500,000, and the average sales quota of those sales representatives.

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

El conjunto de resultados es el siguiente:Here is the result set.

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

H.H. Usar COUNT con HAVINGUsing COUNT with HAVING

En este ejemplo se utiliza COUNT con la cláusula HAVING para devolver los departamentos de una compañía, cada uno de los cuales tiene más de 15 empleados.This example uses COUNT with the HAVING clause to return the departments of a company, each of which has more than 15 employees.

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

El conjunto de resultados es el siguiente:Here is the result set.

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

I.I. Usar COUNT con OVERUsing COUNT with OVER

Este ejemplo usa COUNT con la cláusula OVER para devolver el número de productos que figura en cada uno de los pedidos de ventas especificados.This example uses COUNT with the OVER clause, to return the number of products contained in each of the specified sales orders.

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

El conjunto de resultados es el siguiente:Here is the result set.

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

Vea tambiénSee also

Funciones de agregado (Transact-SQL)Aggregate Functions (Transact-SQL)
COUNT_BIG (Transact-SQL)COUNT_BIG (Transact-SQL)
OVER (cláusula de Transact-SQL)OVER Clause (Transact-SQL)