sql >> Databáze >  >> RDS >> Mysql

Jak vypočítat procento růstu týden po týdnu v MySQL

Sledování procentuálního růstu týden po týdnu je užitečný způsob, jak sledovat týdenní růstové trendy ve vaší firmě. Zde je návod, jak vypočítat procentuální růst týden po týdnu v MySQL. Lze jej použít k výpočtu týdenní změny v SQL pro jakoukoli metriku.

Jak vypočítat procento růstu týden po týdnu v MySQL

Zde jsou kroky k výpočtu procentuálního růstu týden po týdnu v MySQL. Řekněme, že máte tabulku weekly_sales(week,sale), která obsahuje týdenní čísla prodejů, jak je uvedeno níže.

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

Procento růstu z týdne na týden můžete vypočítat pomocí následujícího SQL dotazu na procento růstu.

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

Ve výše uvedeném dotazu ukládáme pro každý týden data z předchozího týdne do dočasné proměnné nazvané last_entry a použijte jej k výpočtu procentuálního růstu.

Bonusové čtení: Jak vypočítat procento dvou sloupců v MySQL

Ve většině případů však budete mít k dispozici denní údaje o prodeji namísto týdenních prodejů. V takovém případě je tedy musíte nejprve agregovat do týdenních prodejů a poté pomocí výše uvedeného dotazu vypočítat procentuální růst týden po týdnu.

Řekněme, že máte tabulku denních údajů o prodeji sales(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 |
| ...        |   ...|
+------------+------+

Řekněme, že chcete vypočítat procentuální růst týden po týdnu, zde je SQL pro procentuální změnu v čase.

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

Ve výše uvedeném dotazu nejprve agregujeme denní prodeje do týdenních prodejů (tučně )a pak pomocí předchozího dotazu vypočítat procentuální růst týden po týdnu.

Bonusové čtení: Jak vypočítat procento jednoho sloupce v MySQL

Pokud chcete filtrovat data použitá pro váš dotaz, můžete do dotazu přidat klauzuli WHERE, jak je uvedeno níže

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;

Vezměte prosím na vědomí, že výpočet procentuálního růstu týden po týdnu závisí na uložení hodnoty předchozího řádku do dočasné proměnné, ujistěte se prosím, že vaše tabulka je již seřazena vzestupně podle čísel týdnů. Jinak by to mohlo dát špatné výsledky.

Poté, co vypočítáte procentuální růst týden po týdnu, můžete použít nástroj pro vytváření grafů k vykreslení výsledku do sloupcového grafu a sdílet jej se svým týmem. Zde je příklad sloupcového grafu, který ukazuje procentuální změnu v průběhu času, vytvořený pomocí Ubiq.

Pokud chcete vytvářet grafy, dashboardy a sestavy z databáze MySQL, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.

  1. Jak vybrat podmnožinu sloupců ze sady výsledků uložené procedury (T-SQL)

  2. Jak srovnávat výkon PostgreSQL

  3. Práce kolem zmeškaných optimalizací

  4. Zobrazovat názvy všech omezení pro tabulku v Oracle SQL