¡Hola, bienvenidos y bienvenidas! Continuando con el curso MySQL 8 Desde Cero, hoy veremos qué es la cláusula GROUP BY en MySQL.
Hasta aquí hemos visto cómo realizar consultas simples aplicando sentencias SELECT, WHERE, LIKE, consultas multitabla con JOINs y operadores relacionales. A continuación veremos cómo agrupar los resultados de una consulta con la cláusula GROUP BY.
¡Empecemos!
¿Qué es la cláusula GROUP BY?
La cláusula GROUP BY se utiliza junto con la función de agregación para agrupar filas de una tabla en conjuntos basados en el valor de una o más columnas. Permite realizar operaciones de agregación, como SUM, COUNT, AVG, MAX, MIN, entre otras, sobre cada grupo resultante en lugar de aplicar esas operaciones a toda la tabla. La sintaxis de GROUP BY es la siguiente:
SELECT nombre_columna, funcion(nombre_columna) FROM nombre_tabla WHERE condicion GROUP BY nombre_columna
Funciones de agregación
Las funciones de agregación permiten efectuar operaciones sobre un conjunto de datos y devolver el resultado en un valor único. GROUP BY utiliza funciones de agregación tales como:
ACOUNT: Se utiliza para contar la cantidad de registros existentes en una columna según las condiciones que se apliquen.
AVG: Se utiliza para calcular el valor de la media aritmética de un conjunto de valores de una determinada columna.
SUM: Se utiliza para calcular la suma de un conjunto de valores de una columna en específico.
MAX: Se utiliza cuando quieres obtener el valor máximo de una columna.
MIN: Se utiliza para obtener el valor mínimo de una columna.
GROUP BY
Veamos los siguientes ejemplos utilizando la cláusula GROUP BY con la base de datos “clínica_veterinaria”.
Utilizando la tabla “Clientes”, quiero obtener el número de clientes que se tiene por zona.
SELECT clinica_veterinaria.clientes.zona, COUNT(*) FROM clinica_veterinaria.clientes GROUP BY clinica_veterinaria.clientes.zona;
De manera similar, quiero obtener el nombre y apellido y la cantidad de mascotas que tiene un cliente.
SELECT clinica_veterinaria.clientes.nombre, clinica_veterinaria.clientes.apellido, COUNT(clinica_veterinaria.mascotas.id) AS cantidad_mascotas FROM clinica_veterinaria.clientes INNER JOIN clinica_veterinaria.mascotas ON clinica_veterinaria.clientes.id = clinica_veterinaria.mascotas.cliente_id GROUP BY clinica_veterinaria.clientes.nombre, clinica_veterinaria.clientes.apellido;
Veamos otro ejemplo utilizando las tablas “Servicios”, “Mascota-Servicio” y “Servicios”, quiero obtener la cantidad y el costo total de servicios que se realizaron a una determinada mascota.
SELECT clinica_veterinaria.mascotas.nombre as mascota, COUNT(clinica_veterinaria.servicios.id) as numero_Servicios, SUM(clinica_veterinaria.servicios.costo) AS total_pagado FROM clinica_veterinaria.servicios INNER JOIN clinica_veterinaria.`mascota-servicio` ON clinica_veterinaria.servicios.id = clinica_veterinaria.`mascota-servicio`.servicio_id INNER JOIN clinica_veterinaria.mascotas ON clinica_veterinaria.mascotas.id = clinica_veterinaria.`mascota-servicio`.mascota_id GROUP BY clinica_veterinaria.mascotas.nombre;
Es importante tener en cuenta que cuando se utiliza la cláusula GROUP BY, solo se pueden seleccionar las columnas que están agrupadas o las columnas de las funciones de agregación.
Veamos un último ejemplo utilizando las tablas “Doctores”, “doctor_servicio” y ‘’Servicios’, quiero obtener el nombre del doctor la cantidad de servicios que ha realizado y el promedio de ingresos percibidos.
SELECT clinica_veterinaria.doctores.nombre_apellido, COUNT(clinica_veterinaria.servicios.id) as numero_Servicios, AVG(clinica_veterinaria.servicios.costo) as promedio_ingreso FROM clinica_veterinaria.doctores INNER JOIN clinica_veterinaria.`doctor-servicio` ON clinica_veterinaria.doctores.id = clinica_veterinaria.`doctor-servicio`.doctor_id INNER JOIN clinica_veterinaria.servicios ON clinica_veterinaria.servicios.id = clinica_veterinaria.`doctor-servicio`.servicio_id GROUP BY clinica_veterinaria.doctores.nombre_apellido;
Recuerden que todos los ejemplos realizados pueden ir probando con MySQL Workbench, así tener una idea más clara de la consulta y los resultados que arroja.

La cláusula GROUP BY es especialmente útil para realizar análisis estadísticos, resúmenes y obtener información agregada de manera estructurada y organizada a partir de grandes conjuntos de datos en una base de datos. Si tienes alguna duda déjanos un comentario y con gusto te responderemos.
En la siguiente clase veremos la Optimización y rendimiento de consultas SQL
¡Te espero en la próxima clase!
Saludos y éxitos.

Victor Peña
Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.