sql >> Databasteknik >  >> RDS >> Mysql

Hur man beräknar kumulativ totalsumma i MySQL

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.

  1. 2 sätt att returnera alla användardefinierade funktioner i en SQL Server-databas

  2. Exportera en CLOB till en textfil med Oracle SQL Developer

  3. 5 fördelar att njuta av när du uppgraderar din databas

  4. Få tabell och kolumn som äger en sekvens