Tri et l'Agrégation en SQL

Le tri et l'agrégation sont des aspects essentiels de la manipulation et de l'analyse des données en SQL. Ils permettent de structurer les résultats des requêtes de manière significative et de réaliser des calculs statistiques ou des regroupements sur les ensembles de données.

Trier les Résultats avec ORDER BY

La clause ORDER BY est utilisée pour trier les résultats d'une requête SQL par une ou plusieurs colonnes, soit en ordre ascendant (ASC) soit en ordre descendant (DESC).

Syntaxe de Base

SELECT colonne1, colonne2, ...
FROM table
ORDER BY colonne1 [ASC|DESC], colonne2 [ASC|DESC], ...;
Exemple
SELECT Nom, Age
FROM Employes
ORDER BY Age DESC, Nom ASC;

Description : Cette requête sélectionne les noms et les âges des employés, en les triant d'abord par âge en ordre décroissant, puis par nom en ordre croissant.

Agréger des Données avec GROUP BY, COUNT, SUM, AVG, etc.

Les fonctions d'agrégation comme COUNT, SUM, AVG, MIN, et MAX sont utilisées pour effectuer des calculs sur des groupes de données. La clause GROUP BY permet de regrouper les lignes qui ont les mêmes valeurs dans les colonnes spécifiées.

Syntaxe de Base

SELECT colonne_agregation, COUNT|SUM|AVG|MIN|MAX(colonne)
FROM table
GROUP BY colonne_agregation;

Exemples

Compter le Nombre d'Employés par Département
SELECT Departement, COUNT(*) AS Nombre_Employes
FROM Employes
GROUP BY Departement;

Description : Compte le nombre d'employés dans chaque département.

Calculer le Salaire Moyen par Département
SELECT Departement, AVG(Salaire) AS Salaire_Moyen
FROM Employes
GROUP BY Departement;

Description : Calcule le salaire moyen des employés dans chaque département.

Trouver le Salaire Maximum et Minimum dans l'Entreprise
SELECT MAX(Salaire) AS Salaire_Max, MIN(Salaire) AS Salaire_Min
FROM Employes;

Commande Having pour Filtrer les Groupes avec un Critère d'Agrégation

Supposons que vous ayez une table Employes avec les colonnes Departement et Salaire.
Vous voulez trouver les départements dont le salaire moyen est supérieur à un certain montant.

SELECT Departement, AVG(Salaire) AS Salaire_Moyen
FROM Employes
GROUP BY Departement
HAVING AVG(Salaire) > 3000;

Description : Cette requête calcule le salaire moyen dans chaque département et sélectionne seulement les départements où le salaire moyen est supérieur à 3000.

Utilisation de HAVING avec COUNT

Imaginons maintenant que vous voulez savoir quels départements ont plus de 10 employés.

SELECT Departement, COUNT(*) AS Nombre_Employes
FROM Employes
GROUP BY Departement
HAVING COUNT(*) > 10;

Description : Cette requête compte le nombre d'employés dans chaque département et ne sélectionne que les départements ayant plus de 10 employés.

Combinaison de WHERE et HAVING

Vous pouvez également combiner WHERE et HAVING dans une seule requête. Par exemple, si vous voulez filtrer les employés avant le regroupement, puis filtrer les groupes après le regroupement :

SELECT Departement, AVG(Salaire) AS Salaire_Moyen
FROM Employes
WHERE Age > 30
GROUP BY Departement
HAVING AVG(Salaire) > 3500;

Description : Cette requête sélectionne d'abord les employés de plus de 30 ans, calcule ensuite le salaire moyen dans chaque département parmi ces employés, et enfin filtre pour ne garder que les départements où ce salaire moyen est supérieur à 3500.

Points Clés à retenir

Exercices

Reprendre la base de données de l'exercice du chapitre sur les fondamentaux

Reprendre les tables "Etudiants" et "Professeurs" et continuer les exercices en utilisant l'agregation.

Fonctions d'Agrégation

Tri et Agrégation (ORDER BY, GROUP BY)

Jointures

Supposons que vous ayez une troisième table Cours avec les colonnes ID_Cours, Titre, ID_Professeur. Créez cette table et effectuez les opérations suivantes :

Sous-requêtes

Utilisation de LIKE et de Wildcards