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

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

    月ごとの成長は、売上や登録などの月ごとの比較に役立つビジネスメトリックKPIです。PostgreSQL関数がないため、SQLクエリを使用して月ごとの成長率を計算します。 PostgreSQLで月ごとの成長を計算する方法は次のとおりです。

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

    sales_data(month、sale)という月間売上を含むテーブルがあるとします。

    postgres=# create table sales_data(month int,sale int);
    
    postgres=# insert into sales_data(month,sale) values(1,2021),
               (2,2102),(3,2150),(4,2312),(5,2425);
    
    postgres=# select * from sales_data;
     month | sale
    -------+------
         1 | 2021
         2 | 2102
         3 | 2150
         4 | 2312
         5 | 2425
    

    PostgreSQLの売上の月ごとの成長率を計算するSQLクエリは次のとおりです。

    postgres=# select month,sum(sale) as current_sale,
                    lag(sum(sale), 1) over (order by month) as previous_month_sale,
                    (100 * (sum(sale) - lag(sum(sale), 1) over (order by month)) / lag(sum(sale), 1) over 
                    (order by month)) || '%' as growth
                    from sales_data
                    group by 1
                    order by 1;
     month | current_sale | previous_month_sale | growth
    -------+--------------+---------------------+--------
         1 |         2021 |                     |
         2 |         2102 |                2021 | 4%
         3 |         2150 |                2102 | 2%
         4 |         2312 |                2150 | 7%
         5 |         2425 |                2312 | 4%
    

    上記のクエリでは、LAGウィンドウ関数を使用して前月の売上を計算し、それを使用してPostgreSQLの月ごとの成長を計算します。 LAGを使用すると、現在の行の前にある行を、定義されたオフセット(この場合は1)でフェッチできます。

    ボーナスリード:PostgreSQLでピボットテーブルを作成する方法

    ほとんどの場合、月次の数値ではなく、日次の売上データがあります。この場合、最初に月間売上高に集計し、次に上記のSQLクエリを適用して、PostgreSQLの月ごとの成長を計算します。

    毎日の売上データがあるとしましょう。

    postgres=# create sales (order_date date, sale int);
    
    postgres=# 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);
    
    postgres=# 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 |
    
    

    PostgreSQLの月間成長率を計算するためのSQLクエリは次のとおりです

    postgres=# select month,sum(sale) as current_sale,
               lag(sum(sale), 1) over (order by month) as previous_month_sale,
               round((100 * (sum(sale) - lag(sum(sale), 1) over (order by month)) / lag(sum(sale), 1) over 
               (order by month)),2) || '%' as growth
               from (select to_char(order_date,'Mon') as month,
               sum(sale) as sale
               from sales
               group by 1 ) sales_data
               group by 1
               order by 1;
     month | current_sale | previous_month_sale | growth
    -------+--------------+---------------------+---------
     Feb   |           65 |                     |
     Jan   |           90 |                  65 | 38.46%
     Mar   |           65 |                  90 | -27.78%
    
    

    上記のクエリでは、日次の売上データを月次の値(太字)に集計します。 )その後、以前のクエリを使用します。

    PostgreSQLで月ごとの成長を計算する前に、WHERE句を使用してデータをフィルタリングすることもできます。

    postgres=# select month,sum(sale) as current_sale,
               lag(sum(sale), 1) over (order by month) as previous_month_sale,
               round((100 * (sum(sale) - lag(sum(sale), 1) over (order by month)) / lag(sum(sale), 1) over 
               (order by month)),2) || '%' as growth
               from (select to_char(order_date,'Mon') as month,
               sum(sale) as sale
               from sales 
               WHERE condition
               group by 1 ) sales_data
               group by 1
               order by 1;
    

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

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

    1. ダウンタイムなしでPostgreSQL11をPostgreSQL12にアップグレードする方法

    2. MySQLで1日あたりの平均売上を計算する方法

    3. SP_WhoIsActiveまたはFogLightを介してSQLデータベースを監視する| SQLServerのパフォーマンスのトラブルシューティング-1

    4. PostgreSQL:文字列を日付にキャストDD / MM / YYYY