CodeGym /Cours /SQL SELF /Exemples d'utilisation des fonctions window pour l'analys...

Exemples d'utilisation des fonctions window pour l'analyse de données

SQL SELF
Niveau 30 , Leçon 1
Disponible

Maintenant, t'es prêt à plonger dans le monde des exemples pratiques pour voir comment tout ça marche sur des vrais cas !

Exemple : calcul du rang des ventes par région

Imaginons qu'on a une table sales qui contient des infos sur les ventes dans différentes régions. On doit déterminer le rang des ventes pour chaque région.

id region sales_amount
1 North 5000
2 North 3000
3 North 7000
4 South 2000
5 South 4000
6 East 8000
7 East 6000

Objectif : trouver le rang (RANK) des ventes pour chaque région

SELECT
    region,
    sales_amount,
    RANK() OVER (PARTITION BY region ORDER BY sales_amount DESC) AS sales_rank
FROM 
    sales;

Résultat :

region sales_amount sales_rank
North 7000 1
North 5000 2
North 3000 3
South 4000 1
South 2000 2
East 8000 1
East 6000 2

Fais gaffe, on a utilisé PARTITION BY region pour calculer les rangs séparément pour chaque région. Si on n'avait pas mis PARTITION BY, le rang aurait été calculé globalement sur toute la table.

Exemple : calcul de la somme cumulée du revenu

Maintenant, on va bosser sur la table transactions pour calculer la somme cumulée du revenu pour chaque client.

id customer_id purchase_date amount
1 101 2023-01-01 100
2 101 2023-01-03 50
3 102 2023-01-02 200
4 101 2023-01-05 150
5 102 2023-01-04 100

Objectif : calculer la somme cumulée pour chaque client

SELECT
    customer_id,
    purchase_date,
    amount,
    SUM(amount) OVER (PARTITION BY customer_id ORDER BY purchase_date) AS cumulative_sum
FROM 
    transactions;

Résultat :

customer_id purchase_date amount cumulative_sum
101 2023-01-01 100 100
101 2023-01-03 50 150
101 2023-01-05 150 300
102 2023-01-02 200 200
102 2023-01-04 100 300

Ici, le truc important c'est d'utiliser ORDER BY purchase_date dans OVER() pour que la somme cumulée soit calculée dans l'ordre chronologique.

Exemple : découpage des données en quantiles

Imagine qu'on a une table students avec les noms et les résultats des tests. On veut diviser les élèves en 4 groupes selon leurs scores.

id name test_score
1 Alice 85
2 Bob 95
3 Charlie 75
4 Diana 88
5 Edward 65
6 Fiona 70

Objectif : diviser les étudiants en 4 groupes avec NTILE()

SELECT
    name,
    test_score,
    NTILE(4) OVER (ORDER BY test_score DESC) AS quartile
FROM 
    students;

Le résultat de la requête sera comme ça :

name test_score quartile
Bob 95 1
Diana 88 1
Alice 85 2
Charlie 75 3
Fiona 70 3
Edward 65 4

NTILE(4) découpe les données en 4 groupes. Les élèves avec les meilleurs scores sont dans le premier groupe, ceux avec les plus faibles dans le dernier.

Exemple : analyse de données temporelles

Dans la table site_visits, on a des infos sur le nombre de visites par jour pour chaque site. On doit calculer la différence de visites entre les jours pour chaque site.

site_id visit_date visits
1 2023-01-01 100
1 2023-01-02 120
1 2023-01-03 110
2 2023-01-01 50
2 2023-01-02 60
2 2023-01-03 70

Notre objectif — calculer la différence de visites entre les jours

SELECT
    site_id,
    visit_date,
    visits,
    visits - LAG(visits) OVER (PARTITION BY site_id ORDER BY visit_date) AS visit_diff
FROM 
    site_visits;

Résultat :

site_id visit_date visits visit_diff
1 2023-01-01 100 NULL
1 2023-01-02 120 20
1 2023-01-03 110 -10
2 2023-01-01 50 NULL
2 2023-01-02 60 10
2 2023-01-03 70 10

La fonction LAG() permet de choper la valeur de la ligne précédente. Si y'a pas de donnée pour la ligne précédente, le résultat sera NULL. Tu verras plus de détails là-dessus dans les prochaines leçons :P

2
Mission
SQL SELF, niveau 30, leçon 1
Bloqué
Calcul du rang des ventes
Calcul du rang des ventes
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION