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

Jak vypočítat procento růstu po měsíci v MySQL

Meziměsíční růst je klíčovým ukazatelem výkonnosti každého podniku. Vzhledem k tomu, že v MySQL neexistuje žádná funkce pro výpočet procentuálního růstu měsíc po měsíci, musíte napsat dotaz SQL pro výpočet změny mezi měsíci. Podívejme se tedy, jak vypočítat procentní růst měsíčně po měsíci v MySQL. Můžete jej také použít ke sledování měsíčních procentuálních změn v průběhu času ve vaší firmě.

Jak vypočítat procentuální růst po měsíci v MySQL

Řekněme, že máte datovou tabulku měsíc_prodej (měsíc,prodej), která obsahuje měsíční tržby, jak je uvedeno níže.

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

Procentuální růst měsíc po měsíci můžete vypočítat pomocí následujícího 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 |
+-------+------+-------------+---------------------+

Ve výše uvedeném dotazu pro každý řádek (měsíc) ukládáme prodej z předchozího měsíce do dočasné proměnné last_entry

Ve většině případů však budete mít k dispozici denní údaje o prodeji. V takovém případě je musíte nejprve agregovat do měsíčních prodejů a poté vypočítat procentuální míru růstu měsíc po měsíci. Řekněme, že máte datovou tabulku sales(created_at, sale), která obsahuje informace o denním prodeji.

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

Řekněme, že chcete vypočítat měsíční tempo růstu, zde je pro to dotaz 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   (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 |
+-------+------+-------------+---------------------+   

Ve výše uvedeném dotazu nejprve agregujeme denní tržby do měsíčních hodnot (zobrazeno tučně ) a poté použijte dřívější dotaz k výpočtu procentuálního růstu.

Bonusové čtení: Jak vypočítat průměrný prodej za den v MySQL

Pokud chcete před výpočtem procentuálního růstu měsíc po měsíci filtrovat svá data, můžete to udělat přidáním klauzule WHERE do svého dotazu, jak je uvedeno níže

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;

Bonusové čtení: Jak vypočítat celkový prodej za měsíc v MySQL?

Poznámka :Vzhledem k tomu, že výpočet procentuálního růstu měsíc po měsíci je založen na konceptu ukládání hodnoty předchozího řádku do dočasné proměnné, ujistěte se, že je tabulka seřazena vzestupně podle měsíce (např. 1,2,3 atd. nebo 202001,202002 ,202003 atd.). Jinak by se vaše data mohla třídit abecedně a poskytovat špatné výsledky, když v MySQL počítáte měsíční růst v procentech.

Pomocí nástroje pro vytváření sestav můžete tato data vykreslit na sloupcový graf nebo řídicí panel a sdílet je se svým týmem. Zde je příklad sloupcového grafu, který ukazuje meziměsíční růst prodeje v procentech, 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. Tabulka chyb Mysql 1050 již existuje, i když ve skutečnosti neexistuje

  2. Jak zahrnout proměnnou PHP do příkazu MySQL

  3. Váš dokonalý průvodce SQL Join:INNER JOIN – Část 1

  4. ZOBRAZIT DATABÁZE Ekvivalent v SQL Server – sp_databases