sql >> Database >  >> RDS >> Mysql

Hoe groeipercentage van maand tot maand te berekenen in MySQL

Maandelijkse groei is een belangrijke prestatie-indicator voor elk bedrijf. Aangezien er geen functie is om het groeipercentage van maand tot maand te berekenen in MySQL, moet u een SQL-query schrijven om de verandering van maand tot maand te berekenen. Laten we dus eens kijken hoe we de procentuele groei van maand tot maand in MySQL kunnen berekenen. U kunt het ook gebruiken om de procentuele verandering van maand tot maand in uw bedrijf in de loop van de tijd te volgen.

Hoe het groeipercentage van maand tot maand te berekenen in MySQL

Stel dat u een gegevenstabel maand_verkoop (maand, verkoop) heeft die maandelijkse verkopen bevat, zoals hieronder weergegeven.

mysql> create table monthly_sales(month int,sale int);
mysql> insert into monthly_sales(month,sale) values(1,20),
(2,30),(3,25),(4,45),(5,25);
mysql> select * from monthly_sales;
+-------+------+
| month | sale |
+-------+------+
| 1     |   20 |
| 2     |   30 |
| 3     |   25 |
| 4     |   45 |
| 5     |   25 |
+-------+------+

U kunt de procentuele groei van maand tot maand berekenen met behulp van de volgende SQL.

mysql> select month, sale,
    if(@last_entry = 0, 0, round(((sale - @last_entry) / @last_entry) * 100,2)) "growth rate",
    @last_entry := sale
    from
    (select @last_entry := 0) x,
    (select month, sum(sale) sale
    from   monthly_sales
    group by month) y;
+-------+------+-------------+---------------------+
| month | sale | growth rate | @last_entry := sale |
+-------+------+-------------+---------------------+
| 1     |   20 |           0 |                  20 |
| 2     |   30 |       50.00 |                  30 |
| 3     |   25 |      -16.67 |                  25 |
| 4     |   45 |       80.00 |                  45 |
| 5     |   25 |      -44.44 |                  25 |
+-------+------+-------------+---------------------+

In de bovenstaande zoekopdracht slaan we voor elke rij (maand) de verkoop van de vorige maand op in een tijdelijke variabele last_entry

In de meeste gevallen beschikt u echter over dagelijkse verkoopgegevens. In dat geval moet u het eerst aggregeren tot maandelijkse verkopen en vervolgens het groeipercentage per maand berekenen. Stel dat u een datatabel sales(created_at, sale) heeft die dagelijkse verkoopinformatie 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-02-05',20),('2020-02-10',20),('2020-02-06',25),
('2020-03-07',15),('2020-03-08',30),('2020-03-09',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-02-05 |   20 |
| 2020-02-10 |   20 |
| 2020-02-06 |   25 |
| 2020-03-07 |   15 |
| 2020-03-08 |   30 |
| 2020-03-09 |   20 |
+------------+------+

Stel dat u de maandelijkse groeisnelheid wilt berekenen, hier is de SQL-query ervoor.

mysql> select month, sale, 
       if(@last_entry = 0, 0, round(((sale - @last_entry) / @last_entry) * 100,2)) "growth rate",
       @last_entry := sale                  
from
      (select @last_entry := 0) x,
      (select month, sum(sale) sale
       from   (select month(order_date) as month,sum(sale) as sale 
               from sales group by month(order_date)) monthly_sales
       group by month) y;		

+-------+------+-------------+---------------------+
| month | sale | growth rate | @last_entry := sale |
+-------+------+-------------+---------------------+
|     1 |   90 |           0 |                  90 |
|     2 |   65 |      -27.78 |                  65 |
|     3 |   65 |        0.00 |                  65 |
+-------+------+-------------+---------------------+   

In de bovenstaande zoekopdracht aggregeren we eerst de dagelijkse verkopen in maandelijkse waarden (weergegeven in vet ) en gebruik vervolgens de eerdere zoekopdracht om de procentuele groei te berekenen.

Bonus lezen: Hoe de gemiddelde verkoop per dag in MySQL te berekenen

Als u uw gegevens wilt filteren voordat u het groeipercentage van maand tot maand berekent, kunt u dat doen door de WHERE-clausule aan uw zoekopdracht toe te voegen, zoals hieronder weergegeven

mysql> select month, sale, 
       if(@last_entry = 0, 0, round(((sale - @last_entry) / @last_entry) * 100,2)) "growth rate",
       @last_entry := sale                  
from
      (select @last_entry := 0) x,
      (select month, sum(sale) sale
       from   (select month(order_date) as month,sum(sale) as sale 
               from sales 
               WHERE condition
               group by month(order_date)) monthly_sales
       group by month) y;

Bonus lezen: Hoe bereken je de totale omzet per maand in MySQL?

Let op :Aangezien de berekening van het groeipercentage van maand tot maand gebaseerd is op het concept van het opslaan van de waarde van de vorige rij in een tijdelijke variabele, moet u ervoor zorgen dat uw tabel is gesorteerd in oplopende volgorde van maand (bijv. 1,2,3,etc of 202001,202002 ,20203, enz.). Anders worden uw gegevens mogelijk alfabetisch gesorteerd en geven ze verkeerde resultaten wanneer u het groeipercentage van maand tot maand in MySQL berekent.

U kunt een rapportagetool gebruiken om deze gegevens in een staafdiagram of dashboard te plotten en met uw team te delen. Hier is een voorbeeld van een staafdiagram dat de procentuele omzetgroei van maand tot maand 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.

  1. Android Kamer + Venster Functies

  2. Informatie over SQL Server-statistieken verkrijgen met behulp van statistische systeemfuncties

  3. REPLACE() Functie in Oracle

  4. Hoe de PATINDEX()-functie werkt in SQL Server (T-SQL)