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…):

 

  1. Selecciona la opción Crear consulta en vista SQL y empieza escribiendo: SELECT.

  2. A continuación indica los campos de la tabla que deseas mostrar en la consulta. Indica en primer lugar el nombre del grupo.

  3. En segundo lugar, debes escribir la sentencia que calcule el total de alumnos: COUNT (Alumnos.Expediente)

  4. Ahora añade la cláusula FROM y escribe el nombre de las dos tablas implicadas: Alumnos y Cursos.

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

  6. Por último debes indicar el campo que utilizarás como elemento de agrupación, escribe GROUP BY Cursos.Curso

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

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

Icono IDevice

Importante

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