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.
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
WHEREfiltra filas antes de agrupar.HAVINGfiltra 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 gruposAgrupar 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, comoGROUP BY 1, 2(donde 1 y 2 se refieren a la primera y segunda columna delSELECT). 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
| 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 |