sql >> Database >  >> RDS >> Mysql

Lopend totaal berekenen in MySQL

MySQL heeft geen functie voor het berekenen van het cumulatieve totaal, ook wel lopend totaal genoemd. U moet een SQL-query schrijven om de cumulatieve som in MySQL te berekenen. Laten we dus eens kijken naar een SQL-query om het lopende totaal in MySQL te berekenen.

Het lopende totaal berekenen in MySQL

Hier leest u hoe u het lopende totaal in MySQL kunt berekenen. Stel dat u de volgende tabel heeft met dagelijkse verkopen.

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

Stel dat u het lopende totaal wilt berekenen voor deze tabel, zoals zo.

+------------+------+-----------------+
| 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 lezen: Hoe u meerdere rijen samenvoegt in één veld in MySQL

Hier is de SQL-query om het lopende totaal in MySQL te berekenen.

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

In de bovenstaande query stellen we eerst een door de gebruiker gedefinieerde variabele csum in op 0. We gebruiken deze om het lopende totaal van elke rij op te slaan. Het is belangrijk op te merken dat csum in geen enkele tabel wordt opgeslagen. Het wordt gewoon gebruikt om de lopende totaalwaarden weer te geven.

Als u dit lopende totaal wilt opslaan, kunt u een nieuwe kolom aan uw tabel toevoegen en de UPDATE-component gebruiken om lopende totaalwaarden op te slaan.

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

Bonus lezen: Hoe voeg je een totale rij toe in MySQL

U kunt uw SQL-query ook aanpassen met behulp van de WHERE-clausule of JOINS, zoals weergegeven,

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


Aangezien MySQL geen ingebouwde functie biedt voor het uitvoeren van totalen, kunt u de bovenstaande SQL-query gebruiken om het totaal in MySQL uit te voeren. U kunt ook MONTH(order_date) . gebruiken in plaats van order_date hierboven als u SQL wilt schrijven voor een cumulatieve som per maand.

Nadat u het lopende totaal hebt berekend, kunt u een grafiektool gebruiken om deze gegevens in een lijndiagram te plotten en deze met uw team te delen. Hier is een voorbeeld van een lijndiagram dat het lopende totaal laat zien, gemaakt met Ubiq.

Als u grafieken, dashboards en rapporten wilt maken vanuit de MySQL-database, kunt u Ubiq proberen. We bieden een gratis proefperiode van 14 dagen aan.

  1. Hoe de telling van de huidige maand zondagen in psql te krijgen?

  2. Een veld verplaatsen in het queryraster in Microsoft Access

  3. Veelgebruikte database-infrastructuurpatronen vergelijken

  4. Hoe voeg ik een string toe aan een kolomwaarde in MySQL?