Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Trier, compter et totaliser

Après cette leçon: Je peux compter et totaliser des lignes par groupe avec SQL.

Leçon de 45 minAucune commande

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

MotCe que ça veut direExemple
Trierranger les lignes dans un ordreORDER BY montant
Croissantdu plus petit au plus grand
Décroissantdu plus grand au plus petitDESC
Agrégatun calcul qui résume plusieurs lignes en une valeurSUM(montant)
Groupeles 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

Code: sql
-- 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

Code: sql
-- 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

VilleCommandes du paquetCOUNT(*)SUM(montant)
Nantes84 + 150 + 17 + 484299
Rennes23 + 210 + 1203353
Angers39 + 952134
Brest62162

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Essayez : un total par ville

Code: sql
-- 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.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.