CodeGym /Cursos /SQL SELF /Contando filas con COUNT() y sus variantes

Contando filas con COUNT() y sus variantes

SQL SELF
Nivel 7 , Lección 1
Disponible

La función COUNT() es una de las funciones agregadas más populares y útiles en SQL. Su tarea principal es contar el número de filas en los resultados de una consulta. Si la función COUNT() fuera un superhéroe en el mundo de SQL, su superpoder sería encontrar rápidamente respuestas a preguntas como:

  • ¿Cuántos empleados trabajan en la empresa?
  • ¿Cuántos estudiantes hay en cada facultad?
  • ¿Cuántos productos se vendieron el mes pasado?

La sintaxis de COUNT() es bastante sencilla:

COUNT(columna)

donde columna es el nombre de la columna cuyas filas vas a contar. Pero hay otras formas de usarla, que vamos a ver más adelante en la lección.

Vamos a empezar con el uso más básico de COUNT().

Variante 1: Contar todas las filas usando COUNT(*)

Cuando necesitas contar cada fila en una tabla, sin importar si tienen datos o no, se usa COUNT(*). El asterisco significa “todas las columnas”.

Ejemplo: Tenemos una tabla students con este contenido:

id name age
1 Otto 20
2 Maria 22
3 NULL 19
4 Anna 21

Ejecutamos la siguiente consulta:

SELECT COUNT(*) 
FROM students;

Resultado:

count
4

La función COUNT(*) no le hace caso a los valores NULL en columnas individuales, porque simplemente cuenta el número de filas en la tabla.

Variante 2: Contar filas con valores existentes en una columna COUNT(columna)

Pero, ¿qué pasa si solo quieres contar las filas donde hay un valor que no es NULL en una columna concreta? En ese caso se usa COUNT(columna).

Ejemplo: vamos a contar cuántos estudiantes tienen nombre.

SELECT COUNT(name)
FROM students;

Resultado:

count
3

¿Ves la diferencia? Hay 4 filas en la tabla, pero en una de ellas la columna name tiene el valor NULL. La función COUNT(columna) ignora las filas donde el valor de la columna es NULL.

Comparación entre COUNT(*) y COUNT(columna)

Entonces, ¿en qué se diferencian exactamente estas dos formas de usar la función: COUNT(*) y COUNT(columna)?

  • COUNT(*) cuenta todas las filas en la tabla, incluyendo las filas con NULL en cualquier columna.
  • COUNT(columna) solo cuenta las filas donde el valor en la columna indicada no es NULL.

Tabla de ejemplo:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21

Consultas:

-- Cuenta todas las filas.
SELECT COUNT(*) FROM students;         -- 4  -- TOTAL (todas las filas)

-- Cuenta solo las filas donde el nombre no es NULL.
SELECT COUNT(name) FROM students;      -- 3  -- Contamos filas con nombre indicado

-- Cuenta solo las filas donde la edad no es NULL.
SELECT COUNT(age) FROM students;        -- 3  -- Contamos filas con edad indicada

Variante 3: Contar valores únicos con COUNT(DISTINCT columna)

A veces necesitas contar solo los valores únicos en una columna. Por ejemplo, queremos saber cuántas edades únicas tienen los estudiantes. Aquí nos ayuda COUNT(DISTINCT columna).

Ejemplo:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(DISTINCT age) FROM students;

Resultado:

count
3

Ojo, que en este caso DISTINCT ignora no solo los duplicados, sino también los valores NULL.

Si intentas usar DISTINCT junto con COUNT(*), te dará error: DISTINCT solo se puede usar con columnas concretas.

Ejemplos de uso de COUNT() en tareas reales

Ejemplo 1. Contar el número de estudiantes

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(*) AS total_students
FROM students;

Resultado:

total_students
4

Ejemplo 2. Contar estudiantes con edad conocida

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(age) AS students_with_age
FROM students;

Resultado:

students_with_age
3

Ejemplo 3. Contar edades únicas

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 20
SELECT COUNT(DISTINCT age) AS unique_ages
FROM students;

Resultado:

unique_ages
2

Errores típicos al usar COUNT()

Pensar que COUNT(columna) cuenta todas las filas, incluso si hay NULL.

Eso no es cierto: COUNT(columna) ignora las filas con NULL en la columna indicada.

Usar COUNT(*) para contar valores únicos.

En vez de eso, usa COUNT(DISTINCT columna).

Olvidarse de filtrar datos concretos antes de contar.

Por ejemplo:

SELECT COUNT(*) FROM students WHERE age > 20;

Aquí solo vas a obtener los estudiantes mayores de 20 años, porque WHERE ya filtra las filas antes de contar.

Estos detalles suelen causar errores lógicos en las consultas. ¡Ojo con eso!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION