Exercice 53 / 60

Analyse Year-over-Year

ConsigneSur la table monthly_sales (colonnes month et revenue, un chiffre d'affaires par mois sur deux années), compare chaque mois de la DERNIÈRE année présente dans la table au même mois de l'année précédente. Colonnes : month (le numéro du mois, de 1 à 12), revenue_current, revenue_previous et la croissance du CA en % (revenue_growth_pct). Trie par mois.

📖 Cours

L'analyse Year-over-Year (YoY) compare une période a la même période de l'année précédente. Technique : lag(..., 12) over (order BY mois) recule de douze lignes, ce qui ne vaut douze mois que si la série ne saute aucun mois.

L'analyse Year-over-Year compare un mois au même mois de l'année précédente, douze mois plus tôt sur la ligne du temps
L'analyse Year-over-Year compare un mois au même mois de l'année précédente, douze mois plus tôt sur la ligne du temps

Exemple (table commandes, si aucun mois ne manque) :

WITH mensuel AS ( SELECT EXTRACT(YEAR FROM date_commande) AS année, EXTRACT(MONTH FROM date_commande) AS mois, SUM(montant) AS ca FROM commandes GROUP BY année, mois)SELECT *, LAG(ca, 12) OVER (ORDER BY année, mois) AS ca_annee_precFROM mensuel;

Attention : un mois sans aucune vente ne produit aucune ligne. Il suffit d'un mois absent pour que lag(..., 12) aille chercher le mois d'avant dans l'année précédente, et tout le reste de la colonne se décale de la même façon. La méthode sûre est de joindre la table sur elle-même en rapprochant les mois de même numéro d'une année à l'autre (prev.mois = curr.mois ET prev.année = curr.année - 1), comme dans l'exercice.

Évolution % = (ca - ca_annee_prec) / ca_annee_prec * 100.

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →