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

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

    週ごとの成長率の監視は、ビジネスの週ごとの成長傾向を追跡するための便利な方法です。 MySQLで週ごとの成長率を計算する方法は次のとおりです。これを使用して、任意のメトリックのSQLの週ごとの変化を計算できます。

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

    MySQLで週ごとの成長率を計算する手順は次のとおりです。以下に示すように、週ごとの販売数を含むテーブルweekly_sales(week、sale)があるとします。

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

    次のSQLクエリを使用して、週ごとの成長率を計算できます。

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

    上記のクエリでは、毎週、前の週のデータを last_entryという一時変数に格納します。 それを使用して成長率を計算します。

    ボーナスリード:MySQLで2つの列のパーセンテージを計算する方法

    ただし、ほとんどの場合、週次売上ではなく日次売上データがあります。したがって、その場合は、最初にそれを週ごとの売上に集計してから、上記のクエリを使用して週ごとの成長率を計算する必要があります。

    毎日の売上データテーブル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 |
    | ...        |   ...|
    +------------+------+
    

    週ごとの成長率を計算したいとします。これが時間の経過に伴う変化率のSQLです。

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

    上記のクエリでは、最初に1日の売り上げを1週間の売り上げに集計します(太字) )次に、前のクエリを使用して、週ごとの成長率を計算します。

    ボーナスリード:MySQLで1列のパーセンテージを計算する方法

    クエリに使用されるデータをフィルタリングする場合は、以下に示すようにクエリにWHERE句を追加できます

    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;
    
    

    週ごとの成長率の計算は、前の行の値を一時変数に格納することに依存するため、テーブルが週番号の昇順で既に並べ替えられていることを確認してください。そうしないと、間違った結果になる可能性があります。

    週ごとの成長率を計算した後、グラフ作成ツールを使用して結果を棒グラフにプロットし、それをチームと共有できます。これは、Ubiqを使用して作成された、時間の経過に伴う変化率を示す棒グラフの例です。

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

    1. 異なるORDERBYのPostgreSQLDISTINCTON

    2. Read Committedは、Postgres互換の分散SQLデータベースには必須です

    3. Oracleの列の最長行の長さを検索します

    4. OracleDatabaseでのPL/SQLサブルーチンの呼び出し表記