Aprende SQL

Agregando datos: COUNT, SUM, AVG, MIN y MAX

Las funciones de agregación procesan un conjunto de filas y devuelven un solo valor. Son fundamentales para obtener resúmenes y estadísticas de tus datos.

playtime_hours
20 10 40 100 80 60 ...
COUNT(*) 12
SUM 10,417
AVG 868
MIN 8
MAX 9,999

Funciones disponibles

FunciónDescripciónEjemplo
COUNTCuenta el número de filasCOUNT(*)
SUMSuma los valores de una columnaSUM(playtime_hours)
AVGCalcula el promedioAVG(playtime_hours)
MINDevuelve el valor mínimoMIN(year)
MAXDevuelve el valor máximoMAX(year)
SELECT COUNT(*) AS total FROM videogames;

COUNT(*) vs COUNT(columna)

Esta diferencia es sutil pero importante (y una pregunta clásica en entrevistas técnicas):

  • COUNT(*) cuenta todas las filas, sin importar si tienen valores NULL o no.
  • COUNT(columna) cuenta solo las filas donde esa columna no es NULL.
SELECT COUNT(*) AS total_filas, COUNT(developer) AS con_developer
FROM videogames;

Si hay filas donde developer es NULL, verás que total_filas es mayor que con_developer. Recuerda esta diferencia: puede ahorrarte muchos bugs.

Combinar funciones

Puedes usar varias funciones de agregación en una misma consulta:

SELECT
  COUNT(*) AS total,
  MIN(year) AS primer_anio,
  MAX(year) AS ultimo_anio
FROM videogames;

Agregar con filtros

Puedes combinar funciones de agregación con WHERE para calcular sobre un subconjunto:

SELECT AVG(playtime_hours) AS avg_hours
FROM videogames
WHERE year > 2010;

GROUP_CONCAT: Concatenar valores

GROUP_CONCAT es una función de agregación que une los valores de una columna en una sola cadena separada por comas. Es perfecta para ver de un vistazo todos los elementos de un grupo:

SELECT developer, GROUP_CONCAT(title) AS juegos
FROM videogames
GROUP BY developer;

Esto devuelve algo como: NintendoThe Legend of Zelda,Super Mario Bros.. Puedes cambiar el separador pasando un segundo argumento: GROUP_CONCAT(title, ' | ').

NULL y las funciones de agregación

Un dato importante: las funciones SUM, AVG, MIN y MAX ignoran los valores NULL automáticamente. Si tienes 10 filas pero 3 tienen NULL en playtime_hours, AVG(playtime_hours) calculará el promedio solo con las 7 filas que sí tienen valor. Esto suele ser el comportamiento deseado, pero conviene saberlo para no llevarte sorpresas con los cálculos.

Nuestra tabla

Nombre de la Tabla: videogames
idtitledeveloperyearplaytime_hours
1The Legend of ZeldaNintendo198620
2Super Mario Bros.Nintendo198510
3Final Fantasy VIISquare Enix199740
4The Witcher 3CD Projekt Red2015100
5MinecraftMojang Studios20119999
6Grand Theft Auto VRockstar Games201380
7Dark SoulsFromSoftware201160
8Portal 2Valve20118
9Red Dead Redemption 2Rockstar Games201870
10The Last of UsNaughty Dog201315
11Halo: Combat EvolvedBungie200110
12God of WarSanta Monica Studio201825

Ejercicios