La liga del instituto
En la liga del instituto juegan tres equipos: Rojos, Azules y Verdes. Una tabla apunta los goles de cada jugador.
Con SUM puedes saber los goles de toda la liga. Pero el delegado quiere otra cosa.
Quiere saber los goles de cada equipo, uno por uno. Eso es agrupar.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Grupo | Un montón de filas que tienen el mismo valor en una columna. | Los jugadores del equipo Rojos |
| GROUP BY | Reparte las filas en grupos según una columna. | GROUP BY team |
| HAVING | Se queda solo con los grupos que cumplen una condición. | HAVING SUM(goals) >= 8 |
| Función de resumen | COUNT, SUM, AVG, MAX o MIN: da un valor por grupo. | SUM(goals) |
| Condición | Una pregunta que se responde con sí o no. | goals >= 2 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un grupo por equipo
Sin agrupar, SUM(goals) mira todas las filas y da un solo número.
Con GROUP BY team, SQL reparte las filas en grupos: un grupo por cada equipo. Después calcula la función dentro de cada grupo. Sale una fila por equipo.
Pruébalo: goles por equipo
-- Una fila por equipo, con la suma de sus goles.
SELECT team, SUM(goals) FROM players GROUP BY team;
-- Cambia SUM(goals) por COUNT(*) y verás cuántos jugadores tiene cada equipo.
Ejemplo resuelto: sumar dentro de cada grupo
| Equipo | Goles de sus jugadores | SUM(goals) | COUNT(*) |
|---|---|---|---|
| Rojos | 5 + 2 + 1 | 8 | 3 |
| Azules | 3 + 6 | 9 | 2 |
| Verdes | 4 + 2 | 6 | 2 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La regla del SELECT
Cuando agrupas, cada fila del resultado es un grupo. Por eso en el SELECT solo caben dos cosas.
Una es la columna por la que agrupas, como team. La otra es una función de resumen. Pedir name no tiene sentido: un grupo tiene muchos nombres y solo cabe una celda.
Pruébalo: varias funciones a la vez
-- Cada equipo con su número de jugadores y sus goles.
SELECT team, COUNT(*) AS players_count, SUM(goals) AS total_goals
FROM players
GROUP BY team
ORDER BY team;
-- Añade MAX(goals) AS best, con una coma delante, para ver el mejor goleador de cada equipo.
Repaso rápido: grupos
Inténtalo
Repaso rápido: grupos
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.
WHERE o HAVING
Ahora el delegado quiere solo los equipos que han metido 8 goles o más.
No vale WHERE. WHERE filtra filas, y todavía no existen los grupos ni sus sumas. Para filtrar grupos se usa HAVING, que va después de GROUP BY.