Aprende SQL

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

Lección 02 · Agregación y ejecución

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.

Diagramas: (1) Agregación: valores de playtime_hours (20, 10, 40, 100, 80, 60) → COUNT(*)=6, SUM=310, AVG=51.67, MIN=10, MAX=100. (2) COUNT(*) vs COUNT(columna): 5 filas → COUNT(*)=5 (“todas las filas”) y COUNT(developer)=3 (“ignora los NULL”).

Funciones disponibles

Función Descripción Ejemplo
COUNT Cuenta el número de filas COUNT(*)
SUM Suma los valores de una columna SUM(playtime_hours)
AVG Calcula el promedio AVG(playtime_hours)
MIN Devuelve el valor mínimo MIN(year)
MAX Devuelve el valor máximo MAX(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

id title developer year playtime_hours
1 The Legend of Zelda Nintendo 1986 20
2 Super Mario Bros. Nintendo 1985 10
3 Final Fantasy VII Square Enix 1997 40
4 The Witcher 3 CD Projekt Red 2015 100
5 Minecraft Mojang Studios 2011 9999
6 Grand Theft Auto V Rockstar Games 2013 80
7 Dark Souls FromSoftware 2011 60
8 Portal 2 Valve 2011 8
9 Red Dead Redemption 2 Rockstar Games 2018 70
10 The Last of Us Naughty Dog 2013 15
11 Halo: Combat Evolved Bungie 2001 10
12 God of War Santa Monica Studio 2018 25

Tablas de esta lección

videogames5 cols

Estructura

🔑idINTEGERtitleTEXTdeveloperTEXTyearINTEGERplaytime_hoursINTEGER

Datos de ejemplo (5 filas)

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

Cuenta el número total de videojuegos en la tabla. Usa el alias 'total'.

sql

Calcula la suma total de horas de juego de todos los videojuegos. Usa el alias 'total_horas'.

sql

Calcula el promedio de horas de juego. Usa el alias 'promedio'.

sql

Encuentra el año del videojuego más antiguo (alias 'mas_antiguo') y el del más reciente (alias 'mas_reciente').

sql