COUNT (Transact-SQL)
Devuelve el número de elementos de un grupo. COUNT funciona como 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. Puede ir seguida de la cláusula OVER.
Convenciones de sintaxis de Transact-SQL
- 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. Se incluyen las filas que contienen valores NULL.
Importante: No se admiten agregados Distinct, por ejemplo AVG(DISTINCT column_name), COUNT(DISTINCT column_name), MAX(DISTINCT column_name), MIN(DISTINCT column_name) y SUM(DISTINCT column_name) cuando se utilizan CUBE o ROLLUP. Si se utilizan, el SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) de Microsoft devuelve un mensaje de error y cancela la consulta.
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.
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.
USE AdventureWorks; GO SELECT COUNT(DISTINCT Title) FROM HumanResources.Employee; GO
Éste es el conjunto de resultados.
----------- 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.
USE AdventureWorks; GO SELECT COUNT(*) FROM HumanResources.Employee; GO
Éste es el conjunto de resultados.
-----------
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 seleccionada.
USE AdventureWorks; GO SELECT COUNT(*), AVG(Bonus) FROM Sales.SalesPerson WHERE SalesQuota > 25000; GO
Éste es el conjunto de resultados.
----------- ---------------------
14 3472.1428
(1 row(s) affected)
