Cláusula GROUP BY en MySQL

Cláusula GROUP BY en MySQL

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

Consultas group by mysql

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

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *