Le chiffre du mois par ville
Lundi matin, la gérante de Cycles Loire prépare la réunion d'équipe. Elle vous demande combien de commandes chaque ville a passées, et pour quel montant.
Vous pourriez copier les lignes dans un tableur et additionner à la main. Une seule requête peut faire le calcul à votre place, sans erreur de recopie.
À la fin de cette leçon
Remarque
Je peux compter et totaliser des lignes par groupe avec SQL.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Trier | ranger les lignes dans un ordre | ORDER BY montant |
| Croissant | du plus petit au plus grand | |
| Décroissant | du plus grand au plus petit | DESC |
| Agrégat | un calcul qui résume plusieurs lignes en une valeur | SUM(montant) |
| Groupe | les lignes qui partagent la même valeur |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
ORDER BY range les lignes
Sans consigne, la base rend les lignes dans un ordre qui n'est pas garanti.
ORDER BY suivi d'une colonne trie le résultat. Par défaut, l'ordre est croissant. Ajoutez DESC pour un ordre décroissant. LIMIT 3 garde ensuite les trois premières lignes. C'est utile pour un classement.
Essayez : les plus grosses commandes
-- Les commandes de la plus grosse à la plus petite.
SELECT id, client, montant FROM commandes
ORDER BY montant DESC;
-- Les trois plus grosses seulement.
SELECT id, client, montant FROM commandes
ORDER BY montant DESC
LIMIT 3;
-- Enlevez DESC dans la première requête, puis relancez.
Une erreur fréquente
Attention
Beaucoup pensent que ORDER BY range du plus grand au plus petit. C'est l'inverse. Par défaut, le tri est croissant. Pour un classement des meilleures ventes, ajoutez DESC après la colonne.
COUNT et SUM résument des lignes
Un agrégat transforme plusieurs lignes en une seule valeur.
COUNT(*) compte les lignes. SUM(montant) additionne une colonne. AS donne un nom lisible au résultat. Vous pouvez garder WHERE : la base filtre d'abord, puis elle calcule. Le signe <> veut dire différent de.
Essayez : compter et additionner
-- Combien de commandes, et pour quel total ?
SELECT COUNT(*) AS nombre, SUM(montant) AS total
FROM commandes;
-- La même chose, sans les commandes annulées.
SELECT COUNT(*) AS nombre, SUM(montant) AS total
FROM commandes
WHERE statut <> 'annulee';
GROUP BY fait un paquet par valeur
GROUP BY ville range les commandes en paquets, un par ville. Ensuite, COUNT et SUM calculent un résultat pour chaque paquet.
Vous obtenez une ligne par ville, et non une ligne pour toute la table. Le tableau ci-dessous montre le calcul fait à la main.
Exemple détaillé : GROUP BY ville
| Ville | Commandes du paquet | COUNT(*) | SUM(montant) |
|---|---|---|---|
| Nantes | 84 + 150 + 17 + 48 | 4 | 299 |
| Rennes | 23 + 210 + 120 | 3 | 353 |
| Angers | 39 + 95 | 2 | 134 |
| Brest | 62 | 1 | 62 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Essayez : un total par ville
-- Un paquet par ville, puis un résumé par paquet.
SELECT ville, COUNT(*) AS nombre, SUM(montant) AS total
FROM commandes
GROUP BY ville
ORDER BY total DESC;
-- Remplacez ville par statut dans les deux endroits, puis relancez.