Compartir a través de


COUNT (Transact-SQL)

Devuelve el número de elementos de un grupo. COUNT funciona como la función COUNT_BIG. La única diferencia entre ambas funciones está en los valores devueltos. COUNT siempre devuelve un valor de tipo de datos int. COUNT_BIG siempre devuelve un valor de tipo de datos bigint.

Se aplica a: SQL Server (SQL Server 2008 a versión actual), Windows Azure SQL Database (Versión inicial a versión actual).

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) 
    OVER ( [ partition_by_clause ] order_by_clause )

Argumentos

  • ALL
    Aplica la función de agregado a todos los valores. ALL es el valor predeterminado.

  • DISTINCT
    Especifica que COUNT devuelva el número de valores únicos no NULL.

  • expression
    Es una expression de cualquier tipo excepto text, image o ntext. No se permite utilizar funciones de agregado ni subconsultas.

  • *
    Especifica que se deben contar todas las filas para devolver el número total de filas de una tabla. COUNT(*) no acepta parámetros y no se puede utilizar con DISTINCT. COUNT(*) no requiere un parámetro expression porque, por definición, no utiliza información sobre ninguna columna específica. COUNT(*) devuelve el número de filas de una tabla especificada sin deshacerse de las duplicadas. Cuenta cada fila por separado. Esto incluye las filas que contienen valores NULL.

  • OVER ( [ partition_by_clause ] order_by_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. Si no se especifica, la función trata todas las filas del conjunto de resultados de la consulta como un único grupo. order_by_clause determina el orden lógico en el que se realiza la operación. order_by_clause es obligatorio. Para obtener más información, vea OVER (cláusula de Transact-SQL).

Tipos devueltos

int

Comentarios

COUNT(*) devuelve el número de elementos de un grupo. Se incluyen valores NULL y duplicados.

COUNT(ALL expression) evalúa expression en todas las filas del grupo y devuelve el número de valores no NULL.

COUNT(DISTINCT expression) evalúa expression en todas las filas del grupo y devuelve el número de valores no NULL únicos.

Si los valores devueltos son superiores a 2^31-1, COUNT genera un error. En su lugar, utilice COUNT_BIG.

COUNT es una función determinista cuando se utiliza sin las cláusulas OVER y ORDER BY. Es no determinista si se especifica con las cláusulas OVER y ORDER BY. Para obtener más información, vea Funciones deterministas y no deterministas.

Ejemplos

A.Usar COUNT y DISTINCT

En el ejemplo siguiente se muestra el número de cargos diferentes que puede tener un empleado que trabaja en Adventure Works Cycles.

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

El conjunto de resultados es el siguiente.

-----------

67

(1 row(s) affected)

B.Usar COUNT(*)

En el ejemplo siguiente se muestra el número total de empleados que trabajan en Adventure Works Cycles.

SELECT COUNT(*)
FROM HumanResources.Employee;
GO

El conjunto de resultados es el siguiente.

-----------

290

(1 row(s) affected)

C.Usar COUNT(*) con otros agregados

En el ejemplo siguiente se muestra que COUNT(*) se puede combinar con otras funciones de agregado de la lista de selección. En el ejemplo se usa la base de datos AdventureWorks2012.

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

El conjunto de resultados es el siguiente.

----------- ---------------------

14 3472.1428

(1 row(s) affected)

C.Usar la cláusula OVER

En el ejemplo siguiente se usan las funciones MIN, MAX, AVG y COUNT con la cláusula OVER para proporcionar los valores agregados de cada departamento de la tabla HumanResources.Department de la base de datos AdventureWorks2012.

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.

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)

Vea también

Referencia

Funciones de agregado (Transact-SQL)

COUNT_BIG (Transact-SQL)

OVER (cláusula de Transact-SQL)