sql >> Database teknologi >  >> RDS >> Mysql

Sådan beregnes vækst i procent måned for måned i MySQL

Vækst måned over måned er en vigtig præstationsindikator for enhver virksomhed. Da der ikke er nogen funktion til at beregne procentvis vækst måned for måned i MySQL, er du nødt til at skrive en SQL-forespørgsel for at beregne måned over måned ændring. Så lad os se, hvordan man beregner procentvis vækst måned for måned i MySQL. Du kan også bruge den til at overvåge måned over måned procentændring over tid i din virksomhed.

Sådan beregnes vækst i procent måned for måned i MySQL

Lad os sige, at du har datatabel month_sales(month,sale), der indeholder månedlige salg, som vist nedenfor.

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 beregne procentvis vækst måned for måned ved hjælp af følgende 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 ovenstående forespørgsel gemmer vi for hver række(måned) salget fra forrige måned i en midlertidig variabel last_entry

I de fleste tilfælde har du dog daglige salgsdata. I så fald skal du først aggregere det til det månedlige salg og derefter beregne den procentvise vækstrate måned for måned. Lad os sige, at du har en datatabel salg(created_at, salg), der indeholder daglige salgsoplysninger.

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

Lad os sige, at du vil beregne den månedlige vækstrate, her er SQL-forespørgslen til 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 ovenstående forespørgsel samler vi først det daglige salg til månedlige værdier (vist med fed skrift ) og brug derefter den tidligere forespørgsel til at beregne den procentvise vækst.

Bonuslæser: Sådan beregner du det gennemsnitlige salg pr. dag i MySQL

Hvis du vil filtrere dine data, før du beregner den procentvise vækst måned for måned, kan du gøre det ved at tilføje WHERE-klausul til din forespørgsel som vist nedenfor

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;

Bonuslæser: Hvordan beregner man det samlede salg pr. måned i MySQL?

Bemærk venligst :Da beregningen af ​​den procentvise vækst måned for måned er baseret på konceptet med at gemme forrige rækkes værdi i en midlertidig variabel, skal du sørge for, at din tabel er sorteret i stigende rækkefølge efter måned (f.eks. 1,2,3 osv. eller 202001,202002 ,202003 osv.). Ellers kan dine data blive sorteret alfabetisk og give forkerte resultater, når du beregner procentvis vækst måned for måned i MySQL.

Du kan bruge et rapporteringsværktøj til at plotte disse data på et søjlediagram eller dashboard og dele dem med dit team. Her er et eksempel på et søjlediagram, der viser salgsvækst i procent måned over måned, oprettet ved hjælp af Ubiq.

Hvis du vil oprette diagrammer, dashboards og rapporter fra MySQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.

  1. Oracle DB Server + APEX + ORDS + JasperRapporter fra bunden (del 1)

  2. Håndtering af SQL-databaser med PyQt:Det grundlæggende

  3. VBA's Case Changing-funktion

  4. Hvordan finder jeg ud af, om en oracle-database er indstillet til autocommit?