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

Comment calculer la moyenne mobile dans PostgreSQL

La moyenne mobile ou la moyenne mobile vous permet de calculer la moyenne sur une période mobile, comme les 7 derniers jours. Le calcul de la moyenne mobile dans le temps donne une tendance plus fluide, par rapport au suivi des chiffres quotidiens. Voici la requête SQL pour calculer la moyenne mobile dans PostgreSQL.

Comment calculer la moyenne mobile dans PostgreSQL

Voici comment calculer la moyenne mobile dans PostgreSQL. Disons que vous avez le tableau suivant

postgres=# create table sales(order_date date,sale int);

postgres=# insert into sales values('2020-04-01',210),
           ('2020-04-02',125),('2020-04-03',150),('2020-04-04',230),
           ('2020-04-05',200),('2020-04-10',220),('2020-04-06',25),
           ('2020-04-07',215),('2020-04-08',300),('2020-04-09',250);

postgres=# select * from sales;
 order_date | sale
------------+------
 2020-04-01 |  210
 2020-04-02 |  125
 2020-04-03 |  150
 2020-04-04 |  230
 2020-04-05 |  200
 2020-04-10 |  220
 2020-04-06 |   25
 2020-04-07 |  215
 2020-04-08 |  300
 2020-04-09 |  250

Lecture bonus :Comment importer un fichier CSV dans PostgreSQL

Supposons que vous souhaitiez calculer la moyenne mobile dans PostgreSQL pour les 5 derniers jours. PostgreSQL vous permet de calculer la moyenne mobile à l'aide des fonctions de fenêtre. Voici la requête pour calculer la moyenne mobile dans PostgreSQL pour les 5 derniers jours. Nous allons le regarder en détail

SELECT a.order_date,a.sale, 
       AVG(a.sale)
       OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)
       AS avg_sales
       FROM sales a ;
 order_date | sale |      avg_sales
------------+------+----------------------
 2020-04-01 |  210 | 210.00
 2020-04-02 |  125 | 167.50
 2020-04-03 |  150 | 161.66
 2020-04-04 |  230 | 178.75
 2020-04-05 |  200 | 183.00
 2020-04-06 |   25 | 146.00
 2020-04-07 |  215 | 164.00
 2020-04-08 |  300 | 194.00
 2020-04-09 |  250 | 198.00
 2020-04-10 |  220 | 202.00

Dans la requête ci-dessus, la fonction AVG calcule la valeur moyenne de la vente colonne. Lorsque nous l'utilisons avec la fonction Fenêtre OVER, il calcule la moyenne uniquement pour la fenêtre de temps que nous avons définie.

Pour calculer la moyenne mobile dans PostgreSQL, nous trions d'abord les lignes par ordre chronologique à l'aide de la clause ORDER BY. Ensuite, nous définissons notre fenêtre pour calculer la moyenne, en utilisant les LIGNES ENTRE 4 LIGNES PRÉCÉDENTES ET ACTUELLES. Cela signifie que pour chaque ligne, calculez la moyenne uniquement pour la ligne actuelle et les 4 lignes précédentes. Ainsi, pour chaque ligne, seules les valeurs des 5 derniers jours sont prises en compte.

Vous pouvez également ajouter des filtres et arrondir les valeurs moyennes en ajoutant la clause WHERE et la fonction ROUND dans la requête SQL ci-dessus.

 SELECT a.order_date,a.sale, 
       round(AVG(a.sale)
       OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW),2) 
       AS avg_sales
       FROM sales a
       WHERE condition;

Lecture bonus :Calculer la croissance d'un mois sur l'autre dans PostgreSQL

Comment calculer la moyenne mobile sur 30 jours dans PostgreSQL

De même, si vous souhaitez calculer la moyenne mobile sur 30 jours dans PostgreSQL, vous pouvez modifier la requête ci-dessus, en considérant 29 lignes précédentes et la ligne actuelle

SELECT a.order_date,a.sale, 
       AVG(a.sale)
       OVER(ORDER BY a.order_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW)
       AS avg_sales
       FROM sales a ;

Comment calculer la moyenne mobile sur 3 mois dans PostgreSQL

Si vous disposez de données de ventes quotidiennes et que vous souhaitez calculer la moyenne mobile sur 3 mois dans PostgreSQL, vous pouvez modifier la requête ci-dessus en considérant 89 lignes précédentes et la ligne actuelle

SELECT a.order_date,a.sale, 
       AVG(a.sale)
       OVER(ORDER BY a.order_date ROWS BETWEEN 89 PRECEDING AND CURRENT ROW)
       AS avg_sales
       FROM sales a ;

Supposons que vous disposiez de données mensuelles au lieu de données quotidiennes et que vous souhaitiez calculer la moyenne mobile des 3 derniers mois

postgres=# create table monthly_sales(order_month date,sale int);

postgres=# insert into monthly_sales values('2019-12-01',120),
           ('2020-01-30',250),('2020-02-28',150),('2020-03-31',300),
           ('2020-04-30',200),('2020-05-31',200),('2020-06-30',250),
           ('2020-07-31',150),('2020-08-31',300),('2020-09-30',200);

postgres=# select * from monthly_sales;
 order_month | sale
-------------+------
 2019-12-01  |  120
 2020-01-30  |  250
 2020-02-28  |  150
 2020-03-31  |  300
 2020-04-30  |  200
 2020-05-31  |  200
 2020-06-30  |  250
 2020-07-31  |  150
 2020-08-31  |  300
 2020-09-30  |  200

Lecture bonus :Comment calculer le taux de rétention en SQL

Nous utilisons la même logique que ci-dessus pour calculer la moyenne mobile dans PostgreSQL. Tout d'abord, nous trions les lignes par ordre chronologique, puis utilisons la fonction OVER window pour calculer la moyenne des 2 lignes précédentes et la ligne actuelle .

SELECT a.order_month,a.sale,
        round(AVG(a.sale)
        OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) 
        AS avg_sales
        FROM monthly_sales a ;

 order_month | sale | avg_sales
-------------+------+-----------
 2019-12-01  |  120 |    120.00
 2020-01-30  |  250 |    185.00
 2020-02-28  |  150 |    173.33
 2020-03-31  |  300 |    233.33
 2020-04-30  |  200 |    216.67
 2020-05-31  |  200 |    233.33
 2020-06-30  |  250 |    216.67
 2020-07-31  |  150 |    200.00
 2020-08-31  |  300 |    233.33
 2020-09-30  |  200 |    216.67

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

Vous pouvez également ajouter des filtres en incluant la clause WHERE dans la requête SQL ci-dessus.

 SELECT a.order_month,a.sale,
        round(AVG(a.sale)
        OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) 
        AS avg_sales
        FROM monthly_sales a
        WHERE condition;

Vous pouvez personnaliser la requête ci-dessus pour calculer la moyenne mobile dans PostgreSQL, selon vos besoins.

Après avoir calculé la moyenne mobile dans PostgreSQL, vous pouvez utiliser un outil graphique pour la tracer sur un graphique linéaire et la partager avec votre équipe. Voici un exemple de graphique linéaire qui visualise la moyenne mobile, 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.