Många gånger kan du behöva beräkna löpande summa eller kumulativ summa för en specifik kolumn, till exempel försäljning. Eftersom det inte finns någon funktion för att beräkna kumulativ totalsumma i MySQL, måste du utföra det via SQL-fråga. Här är en SQL-fråga för att beräkna kumulativ totalsumma i MySQL.
Hur man beräknar kumulativ totalsumma i MySQL
Så här beräknar du kumulativ totalsumma i MySQL. Låt oss säga att du har följande tabell som innehåller dagliga försäljningsdata.
mysql> create table sales(order_date date,sale int); mysql> insert into sales values('2020-01-01',20), ('2020-01-02',25),('2020-01-03',15),('2020-01-04',30),('2020-01-05',20); mysql> select * from sales; +------------+------+ | order_date | sale | +------------+------+ | 2020-01-01 | 20 | | 2020-01-02 | 25 | | 2020-01-03 | 15 | | 2020-01-04 | 30 | | 2020-01-05 | 20 | +------------+------+
Låt oss säga att du vill beräkna den kumulativa summan av försäljningen, som så,
+------------+------+-----------------+ | order_date | sale | cumulative_sale | +------------+------+-----------------+ | 2020-01-01 | 20 | 20 | | 2020-01-02 | 25 | 45 | | 2020-01-03 | 15 | 60 | | 2020-01-04 | 30 | 90 | | 2020-01-05 | 20 | 110 | +------------+------+-----------------+
Här är SQL-frågan för att beräkna kumulativ summa i MySQL.
mysql> set @csum := 0; mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale from sales order by order_date; +------------+------+-----------------+ | order_date | sale | cumulative_sale | +------------+------+-----------------+ | 2020-01-01 | 20 | 20 | | 2020-01-02 | 25 | 45 | | 2020-01-03 | 15 | 60 | | 2020-01-04 | 30 | 90 | | 2020-01-05 | 20 | 110 | +------------+------+-----------------+
Bonus läsning: Hur man skapar pivottabell i MySQL
I ovanstående fråga ställer vi in en temporär variabel csum till 0. Sedan använder vi den för varje rad för att beräkna och lagra den kumulativa summan.
Observera att denna ackumulerade summa inte lagras i någon kolumn. Det visas helt enkelt som resultat.
Om du vill lagra detta värde måste du lägga till en ny kolumn i tabellen och använda UPDATE-satsen som visas nedan.
mysql> alter table sales add column cumulative_sum int; mysql> set @csum := 0; mysql> update sales set cumulative_sum = (@csum := @csum + sale) order by order_date; mysql> select order_date,sale,cumulative_sum from sales; +------------+------+----------------+ | order_date | sale | cumulative_sum | +------------+------+----------------+ | 2020-01-01 | 20 | 20 | | 2020-01-02 | 25 | 45 | | 2020-01-03 | 15 | 60 | | 2020-01-04 | 30 | 90 | | 2020-01-05 | 20 | 110 | +------------+------+----------------+
Du kan anpassa din SQL-fråga så att den inkluderar filter med hjälp av WHERE-satsen eller JOINS, som visas nedan
mysql> set @csum := 0; mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale from sales where <condition> order by order_date;
Bonusläsning: Hur man beräknar median i MySQL
Eftersom MySQL inte erbjuder inbyggd funktion för kumulativ summa, kan du använda ovanstående SQL-fråga för att beräkna kumulativ totalsumma i MySQL.
Efter att du kan beräkna kumulativ totalsumma i MySQL kan du använda ett diagramverktyg enkelt plotta dem som ett linjediagram eller stapeldiagram, som visas nedan. Här är ett exempel på ett diagram skapat med Ubiq.
Om du vill skapa diagram, instrumentpaneler och rapporter från MySQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.