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.