Consultas de agrupación y totales con SQL
En el apartado anterior tratamos la
forma de relacionar varias tablas en una sentencia SQL, pero aún hay
más. Mediante la cláusula GROUP BY puedes utilizar uno o varios
campos para agrupar registros y realizar determinadas operaciones con
ellos. Algunas de estas funciones son las mismas que ya tratamos en
el capítulo de consultas y permiten:
- COUNT: Cuenta el total de elementos de un grupo.
- SUM: Suma los valores numéricos de los registros agrupados.
- MIN: Muestra el valor más pequeño de un grupo.
- MAX: Muestra el valor máximo de todo el conjunto de registros agrupados.
- AVERAGE: Calcula la media de todos los valores seleccionados.
A continuación, diseñemos una nueva consulta donde el objetivo será contar el número total de alumnos que componen cada grupo (1A, 1B, 1C, 2A…):
- Selecciona la opción Crear consulta en vista SQL y empieza escribiendo: SELECT.
- A continuación indica los campos de la tabla que deseas mostrar en la consulta. Indica en primer lugar el nombre del grupo.
- En segundo lugar, debes escribir la sentencia que calcule el total de alumnos: COUNT (Alumnos.Expediente)
- Ahora añade la cláusula FROM y escribe el nombre de las dos tablas implicadas: Alumnos y Cursos.
- Toca el turno de vincular los campos de ambas tablas que te permitirán obtener los resultados correctos. En este caso es necesario relacionar el campo Grupo de la tabla Alumnos con el campo IdCurso de la tabla Curso. Escribe en primer lugar la cláusula WHERE y después Alumnos.Grupo=Cursos.IdGrupo
- Por último debes indicar el campo que utilizarás como elemento de agrupación, escribe GROUP BY Cursos.Curso
- La instrucción SQL queda del siguiente modo: SELECT Cursos.Curso, COUNT(Alumnos.Expediente) FROM Alumnos, Cursos WHERE Alumnos.Grupo=Cursos.IdCurso GROUP BY Cursos.Curso
- Ejecútala y comprueba que los resultados sean similares a los que puedes ver en la figura 6.16.
Figura 6.16
Una buena idea podría ser añadir un alias al campo calculado y así mejorar la comprensión de los resultados:
SELECT Cursos.Curso, COUNT(Alumnos.Expediente) AS "Total Alumnos por Grupo" FROM Alumnos, Cursos WHERE Alumnos.Grupo=Cursos.IdCurso GROUP BY Cursos.Curso

Importante
Recuerda las dobles comillas en el nombre de alias cuando se trata de más de una palabra.