Aprende SQL

Agrupando datos: GROUP BY y HAVING

Lección 03 · Agregación y ejecución

Agrupando datos: GROUP BY y HAVING

GROUP BY agrupa filas que tienen los mismos valores en una columna, permitiéndote aplicar funciones de agregación a cada grupo.

Filas originales
titledeveloper
ZeldaNintendo
MarioNintendo
GTA VRockstar
RDR 2Rockstar
FF VIISquare
MinecraftMojang
GROUP BY developer
Grupos + COUNT
developerTotal
Nintendo2
Rockstar2
Square1
Mojang1

GROUP BY

SELECT developer, COUNT(*) AS total
FROM videogames
GROUP BY developer;

Esta consulta cuenta cuántos juegos tiene cada desarrollador.

HAVING: Filtrar grupos

HAVING es como WHERE, pero para filtrar grupos en lugar de filas individuales. Se usa después de GROUP BY:

SELECT developer, COUNT(*) AS total
FROM videogames
GROUP BY developer
HAVING COUNT(*) > 1;

Diferencia entre WHERE y HAVING

  • WHERE filtra filas antes de agrupar.
  • HAVING filtra grupos después de agrupar.
SELECT developer, COUNT(*) AS total
FROM videogames
WHERE year > 2000         -- Primero filtra filas
GROUP BY developer        -- Luego agrupa
HAVING COUNT(*) > 1;      -- Finalmente filtra grupos

Agrupar por múltiples columnas

Puedes agrupar por más de una columna para obtener combinaciones más específicas. Por ejemplo, si quisieras saber cuántos juegos publicó cada desarrollador en cada año:

SELECT developer, year, COUNT(*) AS total
FROM videogames
GROUP BY developer, year;

Esto crea un grupo por cada combinación única de developer y year. Es muy útil cuando necesitas un nivel de detalle mayor en tus análisis.

Tip: También puedes usar números de posición en GROUP BY, como GROUP BY 1, 2 (donde 1 y 2 se refieren a la primera y segunda columna del SELECT). Sin embargo, se recomienda usar los nombres de las columnas para que la consulta sea más legible y fácil de mantener.

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 cuántos videojuegos ha desarrollado cada developer. Muestra developer y el total (alias 'total').

sql

Calcula el promedio de horas de juego por desarrollador. Muestra developer y el promedio (alias 'promedio').

sql

Muestra solo los desarrolladores que tienen más de 1 videojuego. Muestra developer y total.

sql

Muestra los años en que se publicaron 2 o más videojuegos, ordenados por año. Muestra year y total.

sql