Ibland kan du behöva aggregera data per månad i MySQL. I den här artikeln kommer vi att titta på olika sätt att gruppera efter månad i MySQL.
Hur man grupperar efter månad i MySQL
Vi kommer att använda date_format funktion för att formatera datum till månadsvärden och gruppera efter månad.
Här är syntaxen för date_format-funktionen.
date_format(value, format string)
I ovanstående funktion måste du ange ett värde som en bokstavlig, ett annat funktions- eller kolumnnamn och en formatsträng som anger formatet som detta värde måste konverteras till.
Här är ett exempel för att konvertera en datumsträng till månad.
mysql> SELECT DATE_FORMAT("2020-06-15", "%M"); +---------------------------------+ | DATE_FORMAT("2020-06-15", "%M") | +---------------------------------+ | June | +---------------------------------+
Låt oss säga att du har en tabell försäljning(id, order_date, summa)
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 | +------+------------+--------+
Läs också:Hur man tar bort NOT NULL-begränsning i MySQL
Gruppera efter månadsnamn
Här är SQL-frågan som ska grupperas efter månadsnamn.
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 | +-------------------------------+-------------+
I ovanstående SQL-fråga använder vi date_format(order_date, “%M”) för att konvertera en datumkolumn till månadsnamn och använd summa kolumnen för att summera försäljningsbeloppen.
Gruppera efter månad och år
Här är SQL-frågan att gruppera efter månad och år.
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 | +----------------------------------+-------------+
I ovanstående fråga använder vi date_format för att konvertera datumkolumnens värden till månads- och årsnamn. Vi använder också funktionerna YEAR() och MONTH() för att säkerställa att data grupperas och sorteras efter månads- och årsnummer.
I ovanstående fråga, om vi använder date_format fungerar i grupp för sats, så kommer MySQL att sortera grupperna alfabetiskt, istället för kronologiskt. Se nedan.
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 | +-------------------------------+-------------+
Behöver du ett rapporteringsverktyg för MySQL? Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!