PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come calcolare la crescita mese dopo mese in PostgreSQL

La crescita mese dopo mese è un utile KPI della metrica aziendale per il confronto mese dopo mese di vendite, iscrizioni, ecc. Calcoleremo la crescita percentuale mensile tramite query SQL, poiché non esiste una funzione PostgreSQL per questo. Ecco come calcolare la crescita mese dopo mese in PostgreSQL.

Come calcolare la crescita mese dopo mese in PostgreSQL

Supponiamo che tu abbia una tabella che contiene le vendite mensili chiamata 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

Ecco la query SQL per calcolare la crescita percentuale mensile delle vendite in PostgreSQL.

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%

Nella query precedente, utilizziamo la funzione finestra LAG per calcolare le vendite del mese precedente e la usiamo per calcolare la crescita mese dopo mese in PostgreSQL. LAG ti consente di recuperare la riga che precede la riga attuale, con un offset definito, che nel nostro caso è 1.

Bonus letto: Come creare una tabella pivot in PostgreSQL

Nella maggior parte dei casi, avrai dati sulle vendite giornaliere, anziché numeri mensili. In questo caso, prima lo aggreghiamo ai numeri di vendita mensili e quindi applichiamo la query SQL sopra per calcolare la crescita mese dopo mese in PostgreSQL.

Supponiamo che tu disponga di dati sulle vendite giornaliere.

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 |

Ecco la query SQL per calcolare il tasso di crescita mensile in PostgreSQL

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%

Nella query precedente, aggreghiamo i dati sulle vendite giornaliere in valori mensili (in grassetto ) e quindi utilizza la query precedente.

Puoi anche filtrare i tuoi dati, utilizzando una clausola WHERE, prima di calcolare la crescita di mese in mese in PostgreSQL.

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;

Dopo aver calcolato la crescita mese dopo mese in PostgreSQL, puoi utilizzare uno strumento di reporting per tracciare questi dati su un grafico a barre o dashboard e condividerli con il tuo team. Ecco un esempio di un grafico a barre che mostra la crescita percentuale mese su mese, creato utilizzando Ubiq.

Se vuoi creare grafici, dashboard e report dal database PostgreSQL, puoi provare Ubiq. Offriamo una prova gratuita di 14 giorni.