sql >> Database >  >> RDS >> Mysql

Hoe groeipercentage week na week te berekenen in MySQL

Percentage groei bijhouden van week tot week is een handige manier om wekelijkse groeitrends in uw bedrijf te volgen. Hier leest u hoe u de procentuele groei week na week kunt berekenen in MySQL. Het kan worden gebruikt om week na week veranderingen in SQL te berekenen voor elke statistiek.

Hoe het groeipercentage per week te berekenen in MySQL

Hier zijn de stappen om het groeipercentage week na week in MySQL te berekenen. Stel dat u een tabel weekly_sales(week,sale) heeft die wekelijkse verkoopcijfers bevat, zoals hieronder weergegeven.

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

U kunt het groeipercentage week na week berekenen met behulp van de volgende SQL-query voor het groeipercentage.

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

In de bovenstaande zoekopdracht slaan we voor elke week de gegevens van de vorige week op in een tijdelijke variabele genaamd last_entry en gebruik het om de procentuele groei te berekenen.

Bonus lezen: Hoe het percentage van twee kolommen in MySQL te berekenen

In de meeste gevallen heeft u echter dagelijkse verkoopgegevens in plaats van wekelijkse verkopen. In dat geval moet u het dus eerst aggregeren tot wekelijkse verkopen en vervolgens de bovenstaande zoekopdracht gebruiken om het groeipercentage van week tot week te berekenen.

Stel dat u een dagelijkse tabel met verkoopgegevens heeft verkopen (order_date, sale)

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

Stel dat u het groeipercentage van week tot week wilt berekenen, hier is de SQL voor procentuele verandering in de loop van de tijd.

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

In de bovenstaande zoekopdracht aggregeren we eerst dagelijkse verkopen in wekelijkse verkopen (in vet )en gebruik dan de eerdere zoekopdracht om het groeipercentage week na week te berekenen.

Bonus lezen: Hoe het percentage van één kolom in MySQL te berekenen

Als u de gegevens wilt filteren die voor uw zoekopdracht worden gebruikt, kunt u een WHERE-component aan uw zoekopdracht toevoegen, zoals hieronder weergegeven

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;

Let op, aangezien de berekening van het groeipercentage van week tot week afhankelijk is van het opslaan van de waarde van de vorige rij in een tijdelijke variabele, moet u ervoor zorgen dat uw tabel al is gesorteerd in oplopende volgorde van weeknummers. Anders kan het verkeerde resultaten opleveren.

Nadat u week na week het groeipercentage hebt berekend, kunt u een grafiektool gebruiken om het resultaat in een staafdiagram uit te zetten en dit met uw team te delen. Hier is een voorbeeld van een staafdiagram dat procentuele verandering in de loop van de tijd 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 aan.

  1. Hoe het maximale aantal verbindingen in MySQL te vergroten?

  2. Een MySQL-installatie maken voor lokaal testen

  3. SQL SELECTEER EN Operator

  4. Hoe koppel ik een hele dag aan een datetime-veld?