Agrupar por mes en MySQL

Preet Sanghavi 3 enero 2023
Agrupar por mes en MySQL

En este tutorial, aprenderemos cómo agrupar valores por mes en una base de datos MySQL.

Las empresas y organizaciones deben encontrar datos de usuarios o clientes en función de sus tendencias de compra o uso en meses. Una empresa en particular puede inferir datos reveladores si se da cuenta de los meses óptimos para impulsar el negocio, y MySQL nos ayuda con esta tarea.

MySQL nos proporciona la función date_format(), que contiene dos valores principales. El primero es el nombre de la columna que se está considerando y el segundo es el período de tiempo para la agrupación.

Una vez que nuestra función está configurada, podemos agrupar diferentes períodos de tiempo usando la cláusula GROUP BY en MySQL. La sintaxis de esta operación es la siguiente.

select date_format(date_column, '%M'),sum(any_other_column)
from name_of_the_table
group by date_format(date_column, '%M');

Esta sintaxis asume que deseamos agrupar los valores de any_other_column por mes. Por lo tanto, proporciona el total de una columna particular para cada mes en nuestra tabla.

Veamos este método en acción.

Pero antes de comenzar, creemos un conjunto de datos ficticio creando una tabla, student_semester_date con algunas filas.

-- create the table student_semester_date
CREATE TABLE student_semester_date(
  stu_id int,
  stu_date date, 
  stu_marks int
);

Luego, insertemos algunas filas en esta tabla usando la consulta a continuación.

-- insert rows in the table student_semester_date
insert into student_semester_date(stu_id,stu_date,stu_marks)
     values(1,'2020-10-01',150),
     (2,'2020-10-10',100),
     (3,'2020-11-05',250),
     (4,'2020-11-15',150),
     (5,'2020-12-01',350),
     (6,'2020-12-21',250);

Las dos consultas anteriores crean una tabla con filas con los nombres y apellidos de los estudiantes.

SELECT * FROM student_semester_date;

Producción :

stu_id	stu_date	stu_marks
1		2020-10-01	150
2		2020-10-10	100
3		2020-11-05	250
4		2020-11-15	150
5		2020-12-01	350
6		2020-12-21	250

Intentemos agrupar las notas de diferentes alumnos en función de los meses de la columna stu_date. Básicamente, implicaría contar las calificaciones totales de cada mes en nuestra tabla student_semester_date.

Agrupar por mes en MySQL

Como hemos visto en la sintaxis anterior, podemos operar agrupando notas por mes en nuestra tabla student_semester_date con la ayuda de la siguiente consulta.

select date_format(stu_date, '%M') as Month,sum(stu_marks) as total_marks
from student_semester_date
group by date_format(stu_date, '%M');

El código anterior devuelve las notas totales de cada mes en la tabla student_semester_date.

Significaría que para noviembre tendríamos 400 ya que hay dos entradas en nuestra tabla para noviembre con marcas 250 y 150 (250 + 150 = 400). El resultado de la consulta antes mencionada es el siguiente.

Month       total_marks
October		250
November	400
December	600
Nota
Usamos el alias Month y total_marks en el código antes mencionado para una mejor legibilidad con la palabra clave AS en MySQL.

Por lo tanto, con la ayuda de la función date format() y la sentencia group by, podemos agrupar de manera eficiente los valores por mes en una tabla particular en MySQL.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - MySQL Query