A volte potrebbe essere necessario aggregare i dati per mese in MySQL. In questo articolo, esamineremo diversi modi per raggruppare per mese in MySQL.
Come raggruppare per mese in MySQL
Useremo date_format funzione per formattare la data nei valori del mese e raggruppare per mese.
Ecco la sintassi della funzione date_format.
date_format(value, format string)
Nella funzione precedente è necessario specificare il valore come valore letterale, un'altra funzione o nome di colonna e una stringa di formato che specifichi il formato in cui deve essere convertito questo valore.
Ecco un esempio per convertire una stringa di data in un mese.
mysql> SELECT DATE_FORMAT("2020-06-15", "%M"); +---------------------------------+ | DATE_FORMAT("2020-06-15", "%M") | +---------------------------------+ | June | +---------------------------------+
Supponiamo che tu abbia una tabella vendite(id, data_ordine, importo)
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 | +------+------------+--------+
Leggi anche:Come rimuovere il vincolo NOT NULL in MySQL
Raggruppa per nome mese
Ecco la query SQL per raggruppare per nome del mese.
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 | +-------------------------------+-------------+
Nella query SQL precedente utilizziamo date_format(order_date, “%M”) per convertire una colonna di data nel nome del mese e utilizzare sum colonna per sommare gli importi delle vendite.
Raggruppa per mese e anno
Ecco la query SQL da raggruppare per mese e anno.
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 | +----------------------------------+-------------+
Nella query precedente, utilizziamo date_format per convertire i valori della colonna della data in nomi di mesi e anni. Utilizziamo anche le funzioni ANNO() e MESE() per garantire che i dati siano raggruppati e ordinati per mese e anno.
Nella query precedente, se utilizziamo date_format funzione in gruppo per clausola, quindi MySQL ordinerà i gruppi in ordine alfabetico, anziché cronologico. Vedi sotto.
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 | +-------------------------------+-------------+
Hai bisogno di uno strumento di reporting per MySQL? Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!