sql >> Base de Datos >  >> RDS >> Mysql

Cómo agrupar por mes en MySQL

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!