sql >> Databasteknik >  >> RDS >> Mysql

Hur man beräknar löpande totalsumma i MySQL

MySQL har ingen funktion för att beräkna kumulativ totalsumma, även känd som löpande total. Du måste skriva en SQL-fråga för att beräkna kumulativ summa i MySQL. Så låt oss titta på en SQL-fråga för att beräkna löpande totalsumma i MySQL.

Hur man beräknar löpande totalsumma i MySQL

Så här beräknar du löpande total i MySQL. Låt oss säga att du har följande tabell som innehåller daglig försäljning.

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 löpande total för den här tabellen, 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 |
+------------+------+-----------------+

Bonusläsning: Hur man sammanfogar flera rader i ett fält i MySQL

Här är SQL-frågan för att beräkna löpande totalsumma 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 |
+------------+------+-----------------+

I ovanstående fråga satte vi först en användardefinierad variabel csum till 0. Vi använder den för att lagra varje rads löpande totalsumma. Det är viktigt att notera att csum inte lagras i någon tabell. Den används helt enkelt för att visa de löpande totala värdena.

Om du vill lagra denna löpande summa kan du lägga till en ny kolumn i din tabell och använda UPDATE-satsen för att lagra löpande totala värden.

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 |
+------------+------+----------------+

Bonusläsning: Hur man lägger till total rad i MySQL

Du kan också anpassa din SQL-fråga med hjälp av WHERE-satsen eller JOINS, som visas,

mysql> set @csum := 0;
mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale
       from sales where <condition>
       order by order_date;


Eftersom MySQL inte erbjuder någon inbyggd funktion för att köra totalt, kan du använda ovanstående SQL-fråga för att köra totalt i MySQL. Du kan också använda MONTH(order_date) istället för order_date ovan om du vill skriva SQL för kumulativ summa per månad.

När du har beräknat löpande totalsumma kan du använda ett diagramverktyg för att plotta dessa data i ett linjediagram och dela dem med ditt team. Här är ett exempel på ett linjediagram som visar löpande totalsumma, 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. Android rum + fönsterfunktioner

  2. Prestanda för sys.partitioner

  3. Hur använder man osignerade int/long-typer med Entity Framework?

  4. Hur får man första och sista posten från en sql-fråga?