sql >> データベース >  >> RDS >> Mysql

MySQLで月ごとの成長率を計算する方法

    月々の成長は、すべてのビジネスの主要業績評価指標です。 MySQLには月ごとの成長率を計算する関数がないため、月ごとの変化を計算するSQLクエリを作成する必要があります。それでは、MySQLで月ごとの成長率を計算する方法を見てみましょう。また、これを使用して、ビジネスの月ごとの変化率を監視することもできます。

    MySQLで月ごとの成長率を計算する方法

    以下に示すように、月間売上高を含むデータテーブルmonth_sales(month、sale)があるとします。

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

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

    上記のクエリでは、各行(月)について、前月の売り上げを一時変数 last_entryに格納します。

    ただし、ほとんどの場合、毎日の売上データがあります。その場合は、まず月間売上高に集計してから、月ごとの成長率を計算する必要があります。毎日の売上情報を含むデータテーブルsales(created_at、sale)があるとします。

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

    毎月の成長率を計算するとします。これが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 |
    +-------+------+-------------+---------------------+   
    

    上記のクエリでは、最初に日次売上を月次値に集計します(太字で表示) )次に、前のクエリを使用して成長率を計算します。

    ボーナスリード:MySQLで1日あたりの平均売上を計算する方法

    月ごとの成長率を計算する前にデータをフィルタリングする場合は、以下に示すようにクエリにWHERE句を追加することでフィルタリングできます

    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;
    
    

    ボーナスリード:MySQLで1か月あたりの総売上高を計算する方法

    注意 :月ごとの成長率の計算は、前の行の値を一時変数に格納するという概念に基づいているため、テーブルが月の昇順(1、2、3などまたは202001、202002など)で並べ替えられていることを確認してください。 、202003など)。そうしないと、MySQLで月ごとの成長率を計算すると、データがアルファベット順に並べ替えられ、間違った結果が得られる可能性があります。

    レポートツールを使用して、このデータを棒グラフまたはダッシュボードにプロットし、チームと共有できます。これは、Ubiqを使用して作成された、月ごとの売上成長率を示す棒グラフの例です。

    MySQLデータベースからチャート、ダッシュボード、レポートを作成したい場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。

    1. 例を含むSQLJOINチュートリアル

    2. スタックの構成-MySQLコンテナのDockerデプロイメントを簡素化する

    3. SQLiteでNULLを「N/A」に置き換える3つの方法

    4. HibernateOracleシーケンスは大きなギャップを生成します