SELECT c.nom, COUNT(cmd.id) AS nb_commandes, SUM(cmd.montant) AS total
FROM clients c
LEFT JOIN commandes cmd ON cmd.client_id = c.id
AND cmd.date_commande >= '2026-01-01'
WHERE c.pays = 'FR'
GROUP BY c.nom
HAVING SUM(cmd.montant) > 1000
ORDER BY total DESC;
- Ordre logique d'exécution :
FROM/JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. - INNER JOIN : seulement les lignes qui correspondent ; LEFT JOIN : toutes les lignes de gauche, avec NULL à droite si aucune correspondance.
WHERE filtre les lignes ; HAVING filtre les groupes après agrégation.NULL se teste avec IS NULL, jamais avec = NULL.- Sous-requêtes,
EXISTS, CTE (WITH) et fonctions de fenêtre (ROW_NUMBER() OVER (PARTITION BY …)).