TP 2 - Agrégats et Choix multiple

Exercice 4 : Bonus - Requêtes avancées

Questions bonus

Combinez agrégats, CASE et dates pour résoudre des problèmes complexes. À faire uniquement si vous avez le temps !

1. Calculer le montant moyen des commandes par semestre

Affichez le semestre, le nombre de commandes et le montant moyen par semestre.

💡 Indice

Vous devez d'abord extraire le mois, puis convertir en semestre (01-06 = S1, 07-12 = S2).

2. Identifier les produits "saisonniers" : vendus intensivement certains mois seulement

Un produit est saisonnier s'il a une vente 3x supérieure certains mois vs autres mois.

3. Afficher les commandes "à risque" : délai de livraison > 30 jours OU remise > 15%

Listez les commandes avec un problème potentiel.

4. Créer un "classement" mensuel des employés par nombre de commande

Affichez le mois et les employés en fonction de leurs chiffre d'affaires.

5. Calculer le "cycle de vie" du client : temps écoulé depuis première commande

Affichez le client, sa première commande et le nombre de jours depuis.

6. Identifier les produits "à relancer" : peu vendus mais en stock

Produits avec stock > moyenne ET quantité vendue < 10 unités.

7. Calculer la marge potentielle par catégorie

Affichez la catégorie et le pourcentage de marge moyenne (supposez un coût = 60% du PrixUnit).

8. Afficher les anomalies : commandes sans livraison (DateLivraison NULL) après 60 jours

Identifiez les commandes potentiellement problématiques.

9. Créer une segmentation client : "VIP" (> 5000€), "Régulier" (1000-5000€), "Occasionnel" (< 1000€)

Affichez la segmentation avec le nombre de clients par catégorie.

10. Analyser la tendance : comparer le CA des 3 premiers mois vs les 3 derniers mois

Affichez la croissance ou décroissance en %.

Rappel de cours

Combinaison de concepts

Pour les requêtes complexes, vous devrez souvent combiner JOIN, GROUP BY, HAVING et CASE.

-- Exemple complexe : CA par année avec classification
SELECT 
    STRFTIME('%Y', DateCom) AS Annee,
    SUM(PrixUnit * Qte) AS CA,
    CASE 
        WHEN SUM(PrixUnit * Qte) > 100000 THEN 'Excellent'
        ELSE 'Normal'
    END AS Performance
FROM Commande
JOIN DetailCommande ON Commande.NoCom = DetailCommande.NoCom
GROUP BY Annee;

Le diagramme s'affichera ici une fois la base chargée

Structure des tables

Les détails des tables s'afficheront ici une fois la base chargée

Les résultats s'afficheront ici après exécution d'une requête
Aucune requête exécutée