PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment calculer la croissance d'un mois sur l'autre dans PostgreSQL

La croissance d'un mois à l'autre est un indicateur de performance clé utile pour la comparaison mensuelle des ventes, des inscriptions, etc. Nous calculerons la croissance mensuelle en pourcentage via une requête SQL, car il n'y a pas de fonction PostgreSQL pour cela. Voici comment calculer la croissance d'un mois sur l'autre dans PostgreSQL.

Comment calculer la croissance d'un mois sur l'autre dans PostgreSQL

Supposons que vous ayez une table contenant les ventes mensuelles appelée 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

Voici la requête SQL pour calculer le pourcentage de croissance des ventes d'un mois sur l'autre dans 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%

Dans la requête ci-dessus, nous utilisons la fonction de fenêtre LAG pour calculer les ventes du mois précédent et l'utilisons pour calculer la croissance d'un mois à l'autre dans PostgreSQL. LAG vous permet de récupérer la ligne qui précède la ligne actuelle, à un décalage défini, qui est de 1 dans notre cas.

Lecture bonus : Comment créer un tableau croisé dynamique dans PostgreSQL

Dans la plupart des cas, vous aurez des données de ventes quotidiennes, au lieu de chiffres mensuels. Dans ce cas, nous l'agrégeons d'abord aux chiffres de ventes mensuels, puis appliquons la requête SQL ci-dessus pour calculer la croissance d'un mois sur l'autre dans PostgreSQL.

Disons que vous avez des données de ventes quotidiennes.

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 |

Voici la requête SQL pour calculer le taux de croissance mensuel dans 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%

Dans la requête ci-dessus, nous agrégeons les données de ventes quotidiennes aux valeurs mensuelles (en gras ) puis utilisez la requête précédente.

Vous pouvez également filtrer vos données à l'aide d'une clause WHERE avant de calculer la croissance mensuelle dans 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;

Après avoir calculé la croissance d'un mois sur l'autre dans PostgreSQL, vous pouvez utiliser un outil de création de rapports pour tracer ces données sur un graphique à barres ou un tableau de bord et les partager avec votre équipe. Voici un exemple de graphique à barres illustrant la croissance en pourcentage d'un mois sur l'autre, créé à l'aide d'Ubiq.

Si vous souhaitez créer des graphiques, des tableaux de bord et des rapports à partir de la base de données PostgreSQL, vous pouvez essayer Ubiq. Nous offrons un essai gratuit de 14 jours.