sql >> Databasteknik >  >> RDS >> Mysql

Hur man beräknar procentuell tillväxt månad för månad i MySQL

Tillväxt från månad till månad är en nyckelindikator för varje företag. Eftersom det inte finns någon funktion för att beräkna procentuell tillväxt månad för månad i MySQL, måste du skriva en SQL-fråga för att beräkna månad över månad förändring. Så låt oss se hur man beräknar procentuell tillväxt månad för månad i MySQL. Du kan också använda den för att övervaka månad för månad procentuell förändring över tid i ditt företag.

Hur man beräknar procentuell tillväxt månad för månad i MySQL

Anta att du har datatabell month_sales(month,rea) som innehåller månadsförsäljning, som visas nedan.

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

Du kan beräkna procentuell tillväxt månad för månad med hjälp av följande 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 |
+-------+------+-------------+---------------------+

I ovanstående fråga, för varje rad(månad), lagrar vi försäljningen från föregående månad i en temporär variabel last_entry

Men i de flesta fall har du dagliga försäljningsdata. I så fall måste du först aggregera det till månatlig försäljning och sedan beräkna procentuell tillväxttakt månad för månad. Låt oss säga att du har en datatabell försäljning(skapad_till, försäljning) som innehåller daglig försäljningsinformation.

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

Låt oss säga att du vill beräkna månatlig tillväxttakt, här är SQL-frågan för det.

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

I ovanstående fråga aggregerar vi först den dagliga försäljningen till månadsvärden (visas i fetstil ) och använd sedan den tidigare frågan för att beräkna procentuell tillväxt.

Bonusläsning: Hur man beräknar genomsnittlig försäljning per dag i MySQL

Om du vill filtrera dina data innan du beräknar procentuell tillväxt månad för månad, kan du göra det genom att lägga till WHERE-klausul i din fråga som visas nedan

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 Läs: Hur beräknar man total försäljning per månad i MySQL?

Obs :Eftersom beräkningen av procentuell tillväxt månad för månad baseras på konceptet att lagra föregående rads värde i en temporär variabel, se till att din tabell är sorterad i stigande ordning efter månad (t.ex. 1,2,3,etc eller 202001,202002 ,202003, etc.). Annars kan dina data sorteras alfabetiskt och ge felaktiga resultat när du beräknar procentuell tillväxt månad för månad i MySQL.

Du kan använda ett rapportverktyg för att plotta denna data på ett stapeldiagram eller instrumentpanel och dela den med ditt team. Här är ett exempel på ett stapeldiagram som visar procentuell försäljningstillväxt månad över månad, 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. AVG() – Beräkna medelvärdet för en kolumn i MySQL

  2. Android push-uppdateringar på Play Butik

  3. Hur Access 2019 fungerar och hur du arbetar med det

  4. 2 funktioner som hämtar dagen, månaden och året från ett datum i Oracle