Easier to read with cream paper, a tint, more contrast or larger text? Choose your colours and text, once, for every page.

Vista previa

Agrupar resultados

Esta es la primera página de la lección. Léela y prueba las actividades. El resto está en el curso completo.

40 minutos

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

PalabraQué significaEjemplo
GrupoUn montón de filas que tienen el mismo valor en una columna.Los jugadores del equipo Rojos
GROUP BYReparte las filas en grupos según una columna.GROUP BY team
HAVINGSe queda solo con los grupos que cumplen una condición.HAVING SUM(goals) >= 8
Función de resumenCOUNT, SUM, AVG, MAX o MIN: da un valor por grupo.SUM(goals)
CondiciónUna 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

Código: sql
-- 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

EquipoGoles de sus jugadoresSUM(goals)COUNT(*)
Rojos5 + 2 + 183
Azules3 + 692
Verdes4 + 262

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

Código: sql
-- 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 preguntas
Pruébalo: tus respuestas se corrigen aquí y después se olvidan. Inicia sesión si quieres que se guarde tu puntuación y continuar donde lo dejaste.Iniciar sesión para guardar tu puntuación

Tus 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.

La lección continúa

8 partes más de esta lección están en el curso completo, con los ejercicios y la comprobación final. Una cuenta te da todo.