sql >> Databasteknik >  >> RDS >> Mysql

Hur man beräknar procentuell tillväxt vecka över vecka i MySQL

Övervakning av tillväxt i procent vecka-för-vecka är ett användbart sätt att spåra veckovisa tillväxttrender i ditt företag. Så här beräknar du procentuell tillväxt vecka över vecka i MySQL. Den kan användas för att beräkna veckovis förändring i SQL för alla mätvärden.

Hur man beräknar procentuell tillväxt vecka över vecka i MySQL

Här är stegen för att beräkna procentuell tillväxt vecka över vecka i MySQL. Låt oss säga att du har en tabell weekly_sales(week,sale) som innehåller veckoförsäljningsnummer, som visas nedan.

mysql> create table weekly_sales(week int, sale int);

mysql> insert into weekly_sales(week,sale) 
       values(1,20),(2,30),(3,25),(4,45),(5,25);

mysql> select * from weekly_sales;
+------+------+
| week | sale |
+------+------+
|    1 |   20 |
|    2 |   30 |
|    3 |   25 |
|    4 |   45 |
|    5 |   25 |
+------+------+

Du kan beräkna procentuell tillväxt vecka för vecka med hjälp av följande SQL-fråga för tillväxtprocent.

mysql> select week, 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 week, sum(sale) sale
         from   weekly_sales
         group by week) y;
+------+------+-------------+---------------------+
| week | 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 frågan ovan lagrar vi föregående veckas data för varje vecka i en temporär variabel som heter last_entry och använd den för att beräkna procentuell tillväxt.

Bonusläsning: Hur man beräknar procentandelen av två kolumner i MySQL

Men i de flesta fall kommer du att ha daglig försäljningsdata istället för veckoförsäljning. Så i så fall måste du först aggregera det till veckoförsäljning och sedan använda ovanstående fråga för att beräkna procentuell tillväxt vecka för vecka.

Låt oss säga att du har en daglig försäljningsdatatabell försäljning (orderdatum, försäljning)

mysql>create table sales(order_date date,sale int);

mysql>insert into sales(order_date,sale)
values('2020-01-01',10),('2020-01-02',12),('2020-01-03',15),
('2020-01-04',11),('2020-01-05',13),('2020-01-06',9),
('2020-01-07',21),('2020-01-08',10),('2020-01-09',10),
('2020-01-10',2),('2020-01-11',16),('2020-01-12',12),
('2020-01-13',10),('2020-01-14',18),('2020-01-15',15),
('2020-01-16',12),('2020-01-17',10),('2020-01-18',18),
('2020-01-19',14),('2020-01-20',16),('2020-01-21',12),
('2020-01-22',21),('2020-01-23',13),('2020-01-24',15),
('2020-01-25',20),('2020-01-26',14),('2020-01-27',16),
('2020-01-28',15),('2020-01-29',10),('2020-01-30',18);

mysql>select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-01-01 |   10 |
| 2020-01-02 |   12 |
| 2020-01-03 |   15 |
| 2020-01-04 |   11 |
| 2020-01-05 |   13 |
| 2020-01-06 |    9 |
| 2020-01-07 |   21 |
| 2020-01-08 |   10 |
| 2020-01-09 |   10 |
| ...        |   ...|
+------------+------+

Låt oss säga att du vill beräkna procentuell tillväxt vecka över vecka, här är SQL för procentuell förändring över tid.

mysql> select week, 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 week, sum(sale) sale
            from   (select week(order_date) as week,sum(sale) as sale
                    from sales group by week(order_date)) weekly_sales
            group by week) y;
+------+------+-------------+---------------------+
| week | sale | growth rate | @last_entry := sale |
+------+------+-------------+---------------------+
|    0 |   48 |           0 |                  48 |
|    1 |   81 |       68.75 |                  81 |
|    2 |   95 |       17.28 |                  95 |
|    3 |  111 |       16.84 |                 111 |
|    4 |   73 |      -34.23 |                  73 |
+------+------+-------------+---------------------+

I ovanstående fråga aggregerar vi först daglig försäljning till veckoförsäljning (med fetstil). )och använd sedan den tidigare frågan för att beräkna procentuell tillväxt vecka över vecka.

Bonusläsning: Hur man beräknar procentandelen av en kolumn i MySQL

Om du vill filtrera data som används för din fråga kan du lägga till en WHERE-klausul i din fråga som visas nedan

mysql> select week, 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 week, sum(sale) sale
            from   (select week(order_date) as week,sum(sale) as sale
                    from sales 
                    WHERE condition
                    group by week(order_date)) weekly_sales
            group by week) y;

Observera, eftersom beräkningen av procentuell tillväxt vecka över vecka beror på lagring av föregående rads värde i en temporär variabel, se till att din tabell redan är sorterad i stigande veckonummer. Annars kan det ge felaktiga resultat.

När du har beräknat procentuell tillväxt vecka över vecka kan du använda ett diagramverktyg för att plotta resultatet i ett stapeldiagram och dela det med ditt team. Här är ett exempel på stapeldiagram som visar procentuell förändring över tid, 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. SQL Server standard teckenkodning

  2. Hur current_timestamp() fungerar i PostgreSQL

  3. Hur kontrollerar man ett saknat nummer från en serie nummer?

  4. Dynamisk pivotfråga med PostgreSQL 9.3