Às vezes você pode precisar agregar dados por mês no MySQL. Neste artigo, veremos diferentes maneiras de agrupar por mês no MySQL.
Como agrupar por mês no MySQL
Usaremos date_format função para formatar a data em valores de mês e agrupar por mês.
Aqui está a sintaxe da função date_format.
date_format(valor, string de formato)
Na função acima, você precisa especificar o valor como um literal, outra função ou nome de coluna e uma string de formato que especifica o formato para o qual esse valor precisa ser convertido.
Aqui está um exemplo para converter uma string de data em mês.
mysql> SELECT DATE_FORMAT("2020-06-15", "%M");+--------------------------- ------+| DATE_FORMAT("2020-06-15", "%M") |+------------------------------------------------ +| Junho |+---------------------------------+
Digamos que você tenha uma tabela vendas(id, order_date, amount)
mysql> cria a tabela sales(id int, order_date date, amount int);mysql> insere em sales(id,order_date,amount) values(1,'2020-10-01',150), (2,' 2020-10-10',100), (3,'2020-11-05',250), (4,'2020-15-15',150), (5,'2020-12-01',350 ), (6,'2020-12-21',250);mysql> select * from sales;+------+------------+------ --+| identificação | data_pedido | quantidade |+------+------------+--------+| 1 | 01-10-2020 | 150 || 2 | 2020-10-10 | 100 || 3 | 2020-11-05 | 250 || 4 | 2020-11-15 | 150 || 5 | 01-12-2020 | 350 || 6 | 21-12-2020 | 250 |+------+------------+--------+
Leia também:Como remover a restrição NOT NULL no MySQL
Agrupar por nome do mês
Aqui está a consulta SQL para agrupar por nome do mês.
mysql> selecione date_format(order_date, '%M'),sum(amount) do grupo de vendas por date_format(order_date, '%M');+--------------- --+-------------+| date_format(order_date, '%M') | soma(quantidade) |+-------------------------------+------------ -+| Dezembro | 600 || Novembro | 400 || Outubro | 250 |+------------------------------------------+-------------+
Na consulta SQL acima usamos date_format(order_date, “%M”) para converter uma coluna de data em nome de mês e use sum coluna para somar os valores das vendas.
Agrupar por mês e ano
Aqui está a consulta SQL para agrupar por mês e ano.
mysql> selecione date_format(order_date, '%M %Y'),sum(amount) do grupo de vendas por ano(order_date),month(order_date);+------------- -----------+-------------+| date_format(order_date, '%M %Y') | soma(quantidade) |+----------------------------------+--------- ----+| Outubro 2020 | 250 || Novembro 2020 | 400 || Dezembro 2020 | 600 |+----------------------------------+---------------- -+
Na consulta acima, usamos date_format para converter os valores da coluna de data em nomes de mês e ano. Também usamos as funções YEAR() e MONTH() para garantir que os dados sejam agrupados e ordenados por números de mês e ano.
Na consulta acima, se usarmos date_format função na cláusula group by, então o MySQL irá classificar os grupos em ordem alfabética, ao invés de cronologicamente. Ver abaixo.
mysql> selecione date_format(order_date, '%M'),sum(amount) do grupo de vendas por date_format(order_date, '%M');+--------------- --+-------------+| date_format(order_date, '%M') | soma(quantidade) |+------------------------------------------+------------ -+| Dezembro | 600 || Novembro | 400 || Outubro | 250 |+------------------------------------------+-------------+
Precisa de uma ferramenta de relatório para MySQL? O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!