A veces, es posible que necesite agregar datos por mes en MySQL. En este artículo, veremos diferentes formas de agrupar por mes en MySQL.
Cómo agrupar por mes en MySQL
Usaremos date_format función para formatear la fecha en valores de mes y agrupar por mes.
Esta es la sintaxis de la función date_format.
date_format(value, format string)
En la función anterior, debe especificar el valor como un literal, otra función o nombre de columna y una cadena de formato que especifique el formato al que se debe convertir este valor.
Aquí hay un ejemplo para convertir una cadena de fecha en mes.
mysql> SELECT DATE_FORMAT("2020-06-15", "%M");
+---------------------------------+
| DATE_FORMAT("2020-06-15", "%M") |
+---------------------------------+
| June |
+---------------------------------+
Digamos que tiene una tabla ventas (id, order_date, cantidad)
mysql> create table sales(id int, order_date date, amount int);
mysql> insert into sales(id,order_date,amount)
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);
mysql> select * from sales;
+------+------------+--------+
| id | order_date | amount |
+------+------------+--------+
| 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 |
+------+------------+--------+ Lea también:Cómo eliminar la restricción NOT NULL en MySQL
Agrupar por nombre de mes
Aquí está la consulta SQL para agrupar por nombre de mes.
mysql> select date_format(order_date, '%M'),sum(amount)
from sales
group by date_format(order_date, '%M');
+-------------------------------+-------------+
| date_format(order_date, '%M') | sum(amount) |
+-------------------------------+-------------+
| December | 600 |
| November | 400 |
| October | 250 |
+-------------------------------+-------------+
En la consulta SQL anterior usamos date_format(order_date, “%M”) para convertir una columna de fecha en el nombre del mes y usar sum columna para sumar los montos de las ventas.
Agrupar por mes y año
Aquí está la consulta SQL para agrupar por mes y año.
mysql> select date_format(order_date, '%M %Y'),sum(amount)
from sales
group by year(order_date),month(order_date);
+----------------------------------+-------------+
| date_format(order_date, '%M %Y') | sum(amount) |
+----------------------------------+-------------+
| October 2020 | 250 |
| November 2020 | 400 |
| December 2020 | 600 |
+----------------------------------+-------------+
En la consulta anterior, usamos date_format para convertir los valores de la columna de fecha en nombres de mes y año. También utilizamos las funciones AÑO() y MES() para garantizar que los datos se agrupen y ordenen por número de mes y año.
En la consulta anterior, si usamos date_format en la cláusula group by, MySQL ordenará los grupos alfabéticamente, en lugar de cronológicamente. Ver más abajo.
mysql> select date_format(order_date, '%M'),sum(amount)
from sales
group by date_format(order_date, '%M');
+-------------------------------+-------------+
| date_format(order_date, '%M') | sum(amount) |
+-------------------------------+-------------+
| December | 600 |
| November | 400 |
| October | 250 |
+-------------------------------+-------------+
¿Necesita una herramienta de informes para MySQL? Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!