Contenido de esta guía
Las tres preguntas de COUNT
COUNT es una función de agregación: recibe un conjunto de filas y devuelve un único número por conjunto o por grupo.
COUNT(*): ¿cuántas filas hay?COUNT(columna): ¿cuántas filas tienen un valor no nulo en esa columna?COUNT(DISTINCT columna): ¿cuántos valores no nulos diferentes hay?
No son formas intercambiables. La elección debe expresar la entidad que quieres contar.
Sintaxis
SELECT COUNT(*)
FROM tabla;
SELECT COUNT(columna)
FROM tabla;
SELECT COUNT(DISTINCT columna)
FROM tabla;Ejemplo guiado: clientes, correos y ciudades
SELECT COUNT(*) AS total_clientes,
COUNT(email) AS clientes_con_email,
COUNT(DISTINCT ciudad) AS ciudades_distintas
FROM clientes;| total_clientes | clientes_con_email | ciudades_distintas |
|---|---|---|
| 12 | 9 | 6 |
La tabla contiene 12 filas. Tres clientes tienen email = NULL, por eso COUNT(email) devuelve 9. Madrid, Valencia, Bilbao, Sevilla, Zaragoza y A Coruña forman seis ciudades distintas.
Qué ocurre cuando no hay filas
SELECT COUNT(*) AS productos_muy_caros
FROM productos
WHERE precio > 2000;El resultado es 0. A diferencia de otras agregaciones como SUM, COUNT devuelve cero cuando el conjunto no contiene filas.
Evita contar filas multiplicadas por un JOIN
Después de relacionar una fila de cliente con varios pedidos, el cliente aparece una vez por pedido. COUNT(*) cuenta filas del resultado, no clientes únicos. Si la pregunta es “¿cuántos clientes aparecen?”, puede ser necesario COUNT(DISTINCT c.id).
Antes de contar, nombra la entidad. ¿Cuentas filas, pedidos, clientes con correo, productos distintos o grupos? Esa frase suele indicar qué expresión debe ir dentro de COUNT.
Errores frecuentes
Usar COUNT(columna) para contar todas las filas
Si la columna admite NULL, esas filas no se cuentan. Usa COUNT(*) cuando la pregunta sea cuántas filas cumplen el filtro.
Contar una constante esperando otra semántica
COUNT(1) cuenta filas porque la constante no es nula. No cuenta la columna con id 1 ni suele ser más claro que COUNT(*).
Práctica: pedidos por estado
Cuenta cuántos pedidos hay en cada estado
Devuelve estado y cantidad. Ordena primero por cantidad descendente y después por estado ascendente.
estado.COUNT(*).cantidad en el orden.Solución razonada
SELECT estado,
COUNT(*) AS cantidad
FROM pedidos
GROUP BY estado
ORDER BY cantidad DESC, estado ASC;El resultado es enviado: 9, pendiente: 6 y cancelado: 3. Cada grupo contiene las filas de un estado y COUNT(*) mide su tamaño.
Compatibilidad y rendimiento
Las tres formas mostradas son comunes. El tipo exacto devuelto y las estrategias de ejecución dependen del motor. Un recuento total no debe suponerse instantáneo: PostgreSQL documenta que COUNT(*) sobre toda una tabla requiere trabajo proporcional a la tabla o a un índice que cubra sus filas.
Qué debes recordar
COUNT(*)cuenta filas.COUNT(columna)omite valores nulos.COUNT(DISTINCT columna)cuenta valores distintos no nulos.- Después de un JOIN, comprueba si la entidad se ha repetido.