Vaak moet u het lopend totaal of cumulatief totaal berekenen voor een specifieke kolom, zoals verkopen. Aangezien er geen functie is om het cumulatieve totaal in MySQL te berekenen, moet u dit doen via een SQL-query. Hier is een SQL-query om het cumulatieve totaal in MySQL te berekenen.
Het cumulatieve totaal berekenen in MySQL
Hier leest u hoe u het cumulatieve totaal in MySQL kunt berekenen. Stel dat u de volgende tabel heeft die dagelijkse verkoopgegevens bevat.
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 de cumulatieve som van verkopen wilt berekenen, bijvoorbeeld,
+------------+------+-----------------+ | 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 | +------------+------+-----------------+
Hier is de SQL-query om de cumulatieve som 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 | +------------+------+-----------------+
Bonus gelezen: Hoe een draaitabel in MySQL te maken
In de bovenstaande query stellen we een tijdelijke variabele csum in op 0. Vervolgens gebruiken we deze voor elke rij om de cumulatieve som te berekenen en op te slaan.
Let op, deze cumulatieve som wordt in geen enkele kolom opgeslagen. Het wordt gewoon weergegeven als resultaat.
Als u deze waarde wilt opslaan, moet u een nieuwe kolom aan uw tabel toevoegen en de UPDATE-clausule gebruiken, zoals hieronder weergegeven.
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 | +------------+------+----------------+
U kunt uw SQL-query aanpassen om filters op te nemen met behulp van de WHERE-clausule of JOINS, zoals hieronder weergegeven
mysql> set @csum := 0; mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale from sales where <condition> order by order_date;
Bonus lezen: Hoe de mediaan te berekenen in MySQL
Aangezien MySQL geen ingebouwde functie voor cumulatieve som biedt, kunt u de bovenstaande SQL-query gebruiken om het cumulatieve totaal in MySQL te berekenen.
Nadat u het cumulatieve totaal in MySQL kunt berekenen, kunt u een grafiektool gebruiken om ze eenvoudig te plotten als een lijndiagram of staafdiagram, zoals hieronder weergegeven. Hier is een voorbeeld van een grafiek 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.