Hasta ahora cada fila aparecía de forma individual. Pero muchas veces queremos obtener resúmenes: cuántos registros hay, cuánto suman, cuál es el promedio o cuál es el valor máximo.
¿Qué es una función de agregación?
Una función de agregación recibe varias filas y devuelve un valor resumido.
Las más usadas son:
COUNT()SUM()AVG()MIN()MAX()
Una tabla de ejemplo
Imaginemos estos alumnos:
id | nombre | ciudad | edad | cuota 1 | Ana | Santa Rosa | 20 | 10000 2 | Juan | Santa Rosa | 24 | 12000 3 | Lucía | General Pico | 22 | 11000
Las funciones de agregación toman varias filas como estas y producen un resumen.
COUNT()
Cuenta filas. En el ejemplo anterior, COUNT(*) devuelve 3.
SELECT COUNT(*) AS total_alumnos FROM alumnos;
El alias AS total_alumnos cambia el nombre de la columna del resultado.
COUNT(columna)
A diferencia de COUNT(*), ignora valores NULL.
SELECT COUNT(email) FROM alumnos;
SUM()
Suma valores numéricos. Si las cuotas son 10000, 12000 y 11000, SUM(cuota) devuelve 33000.
SELECT SUM(cuota) AS total_cuotas FROM alumnos;
AVG()
Calcula el promedio. Para edades 20, 24 y 22, AVG(edad) devuelve 22.
SELECT AVG(edad) AS edad_promedio FROM alumnos;
MIN() y MAX()
Devuelven el menor y mayor valor.
SELECT MIN(edad) AS menor_edad, MAX(edad) AS mayor_edad FROM alumnos;
AS: dar nombre al resultado agregado
Las expresiones como COUNT(*) o AVG(edad) pueden quedar con nombres poco cómodos. Un alias mejora la lectura:
SELECT AVG(edad) AS edad_promedio FROM alumnos;
GROUP BY
GROUP BY divide los registros en grupos y aplica las funciones a cada grupo.
SELECT ciudad, COUNT(*) AS cantidad FROM alumnos GROUP BY ciudad;
Ahora ya no obtenemos un total general, sino un total por cada ciudad.
Con los datos del ejemplo, el resultado sería conceptualmente:
ciudad | cantidad Santa Rosa | 2 General Pico | 1
La clave para entender GROUP BY es preguntarse: “¿por qué dimensión quiero resumir los datos?”. Puede ser por ciudad, curso, categoría, mes, cliente, etc.
Promedio por grupo
SELECT ciudad, AVG(edad) AS edad_promedio FROM alumnos GROUP BY ciudad;
Qué columnas pueden aparecer junto a GROUP BY
Cuando agrupamos, cada fila del resultado representa un grupo. Por eso, las columnas seleccionadas deberían ser:
- columnas incluidas en
GROUP BY; o - resultados de funciones de agregación.
Por ejemplo, esta consulta tiene sentido porque ciudad define el grupo y COUNT(*) resume sus filas.
WHERE antes de agrupar
WHERE elimina filas antes de formar los grupos.
SELECT ciudad, COUNT(*) AS cantidad FROM alumnos WHERE edad >= 22 GROUP BY ciudad;
HAVING
HAVING filtra grupos ya calculados.
SELECT ciudad, COUNT(*) AS cantidad FROM alumnos GROUP BY ciudad HAVING COUNT(*) > 1;
El orden lógico: WHERE → GROUP BY → HAVING
Una forma sencilla de pensarlo es:
WHEREdecide qué filas entran al análisis;GROUP BYforma los grupos;- las funciones calculan sus valores;
HAVINGdecide qué grupos permanecen.
WHERE vs HAVING
WHERE: filtra filas antes de agrupar.HAVING: filtra grupos después de agrupar.
COUNT(DISTINCT …)
Cuenta valores distintos.
SELECT COUNT(DISTINCT ciudad) AS cantidad_ciudades FROM alumnos;
NULL en funciones de agregación
Funciones como AVG(), SUM(), MIN(), MAX() y COUNT(columna) normalmente ignoran NULL.
COUNT(*), en cambio, cuenta filas aunque alguna de sus columnas contenga NULL.
Esto importa mucho en promedios: un NULL no se interpreta como cero, simplemente no participa del cálculo.
Ejemplo completo
SELECT ciudad, COUNT(*) AS cantidad, AVG(edad) AS edad_promedio FROM alumnos WHERE edad > 20 GROUP BY ciudad HAVING COUNT(*) >= 2 ORDER BY edad_promedio DESC;
Errores comunes
- confundir WHERE con HAVING;
- olvidar GROUP BY;
- suponer que COUNT(columna) cuenta NULL;
- usar SUM() sobre campos que no representan cantidades.
Ejercicios
- contar alumnos;
- calcular edad promedio;
- obtener edad mínima y máxima;
- contar por ciudad;
- mostrar ciudades con más de un alumno.
¿Qué sigue?
JOIN y relaciones entre tablas.
¿Te sirvió esta guía? ☕
Si este contenido te ayudó y querés apoyar a Club Programador para seguir publicando ejercicios, proyectos y guías gratuitas, podés colaborar mediante:
Ruta SQL / MySQL
Ver todos los contenidos de SQL / MySQL
Descubre más desde Club Programador
Suscríbete y recibe las últimas entradas en tu correo electrónico.
2 opiniones en “Funciones de agregación en SQL: COUNT, SUM, AVG, MIN, MAX, GROUP BY y HAVING”