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.
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).
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.
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.
SELECT colonne_agregation, COUNT|SUM|AVG|MIN|MAX(colonne)
FROM table
GROUP BY colonne_agregation;
SELECT Departement, COUNT(*) AS Nombre_Employes
FROM Employes
GROUP BY Departement;
Description : Compte le nombre d'employés dans chaque 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.
SELECT MAX(Salaire) AS Salaire_Max, MIN(Salaire) AS Salaire_Min
FROM Employes;
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.
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.
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.
Reprendre les tables "Etudiants" et "Professeurs" et continuer les exercices en utilisant l'agregation.
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 :