-- Affiche la liste des clients tries par nom.
-- Cela facilite la recherche d'un client dans l'annuaire.
SELECT id_client, nom_client, email_client, telephone_client
FROM client
ORDER BY nom_client;

-- Affiche les produits tries par prix decroissant.
-- Cela aide a identifier les produits les plus chers.
SELECT id_produit, nom_produit, prix_unitaire
FROM produit
ORDER BY prix_unitaire DESC;

-- Affiche les produits en dessous ou au niveau du seuil d'alerte de stock.
-- Cela sert a declencher des commandes de reapprovisionnement.
SELECT p.id_produit, p.nom_produit, s.quantite_disponible, s.seuil_alerte
FROM stock s
INNER JOIN produit p ON p.id_produit = s.id_produit
WHERE s.quantite_disponible <= s.seuil_alerte
ORDER BY s.quantite_disponible;

-- Affiche les commandes avec le client et le commercant.
-- Cela permet de suivre qui a passe et traite chaque commande.
SELECT co.id_commande, co.date_commande, co.etat_commande, cl.nom_client, com.nom_commercant
FROM commande co
INNER JOIN client cl ON co.id_client = cl.id_client
INNER JOIN commercial com ON co.id_commercant = com.id_commercant
ORDER BY co.date_commande;

-- Affiche les commandes en cours.
-- Cela permet de prioriser les commandes a traiter.
SELECT id_commande, date_commande, id_client
FROM commande
WHERE etat_commande = 'en cours'
ORDER BY date_commande;

-- Affiche les commandes livrees avec leur date de livraison.
-- Cela sert a verifier les delais de livraison.
SELECT id_commande, date_commande, date_livraison
FROM commande
WHERE etat_commande = 'livree'
ORDER BY date_livraison;

-- Affiche les factures avec le client et le montant.
-- Cela permet de suivre la facturation par client.
SELECT f.id_facture, f.date_facture, f.montant_total, f.statut_facture, cl.nom_client
FROM facture f
INNER JOIN commande co ON f.id_commande = co.id_commande
INNER JOIN client cl ON co.id_client = cl.id_client
ORDER BY f.date_facture;

-- Affiche les factures en attente.
-- Cela aide a relancer les paiements.
SELECT id_facture, date_facture, montant_total
FROM facture
WHERE statut_facture = 'en attente'
ORDER BY date_facture;

-- Affiche les clients ayant au moins deux commandes.
-- Cela aide a cibler les clients fideles.
SELECT cl.id_client, cl.nom_client, COUNT(co.id_commande) AS nb_commandes
FROM client cl
INNER JOIN commande co ON co.id_client = cl.id_client
GROUP BY cl.id_client, cl.nom_client
HAVING COUNT(co.id_commande) >= 2;

-- Calcule le total des ventes par client.
-- Cela permet de suivre le chiffre d'affaires par client.
SELECT cl.id_client, cl.nom_client,
       SUM(hv.quantite_vendue * hv.prix_vente) AS total_ventes
FROM client cl
INNER JOIN historique_de_vente hv ON hv.id_client = cl.id_client
GROUP BY cl.id_client, cl.nom_client
ORDER BY total_ventes DESC;

-- Calcule les quantites vendues par produit.
-- Cela permet de voir les produits les plus vendus.
SELECT p.id_produit, p.nom_produit, SUM(hv.quantite_vendue) AS quantite_totale
FROM produit p
INNER JOIN historique_de_vente hv ON hv.id_produit = p.id_produit
GROUP BY p.id_produit, p.nom_produit
ORDER BY quantite_totale DESC;

-- Affiche le top 3 des produits les plus vendus.
-- Cela aide a definir les priorites d'achat.
SELECT p.id_produit, p.nom_produit, SUM(hv.quantite_vendue) AS quantite_totale
FROM produit p
INNER JOIN historique_de_vente hv ON hv.id_produit = p.id_produit
GROUP BY p.id_produit, p.nom_produit
ORDER BY quantite_totale DESC
LIMIT 3;

-- Calcule le prix moyen des produits.
-- Cela donne une reference globale sur le catalogue.
SELECT ROUND(AVG(prix_unitaire), 2) AS prix_moyen
FROM produit;

-- Liste les fournisseurs avec leurs produits.
-- Cela permet de connaitre l'origine de chaque produit.
SELECT fo.nom_fournisseur, p.nom_produit
FROM fournit f
INNER JOIN fournisseur fo ON fo.id_fournisseur = f.id_fournisseur
INNER JOIN produit p ON p.id_produit = f.id_produit
ORDER BY fo.nom_fournisseur, p.nom_produit;

-- Affiche les recommandations avec un score eleve.
-- Cela met en avant les recommandations les plus pertinentes.
SELECT r.id_recommandation, r.score_recommandation, cl.nom_client, p.nom_produit
FROM recommandation r
INNER JOIN client cl ON r.id_client = cl.id_client
INNER JOIN produit p ON r.id_produit = p.id_produit
WHERE r.score_recommandation >= 4
ORDER BY r.score_recommandation DESC;

-- Liste les ventes liees a une recommandation.
-- Cela permet de mesurer l'impact des recommandations.
SELECT hv.id_vente, hv.date_vente, cl.nom_client, p.nom_produit, r.score_recommandation
FROM alimente a
INNER JOIN historique_de_vente hv ON hv.id_vente = a.id_vente
INNER JOIN recommandation r ON r.id_recommandation = a.id_recommandation
INNER JOIN client cl ON hv.id_client = cl.id_client
INNER JOIN produit p ON hv.id_produit = p.id_produit
ORDER BY hv.date_vente;

-- Detaille chaque commande avec ses produits et quantites.
-- Cela sert a preparer les commandes en entrepot.
SELECT co.id_commande, co.date_commande, p.nom_produit, ct.quantite_commandee
FROM contient ct
INNER JOIN commande co ON co.id_commande = ct.id_commande
INNER JOIN produit p ON p.id_produit = ct.id_produit
ORDER BY co.id_commande, p.nom_produit;

-- Affiche les clients et leur magasin associe.
-- Cela permet d'orienter les clients vers leur magasin principal.
SELECT cl.nom_client, m.nom_magasin, m.localisation
FROM possede po
INNER JOIN client cl ON cl.id_client = po.id_client
INNER JOIN magasin m ON m.id_magasin = po.id_magasin
ORDER BY cl.nom_client;

-- Affiche les commandes du 2026-01-07.
-- Cela permet d'analyser une journee precise.
SELECT id_commande, id_client, etat_commande
FROM commande
WHERE date_commande = DATE '2026-01-07'
ORDER BY id_commande;

