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!