Cours les requêtes (Les fonctions de regroupement), tutoriel & guide de travaux pratiques en pdf.
Les fonctions de regroupement : GROUP BY…HAVING
Cette Clause est incontournable en SQL puisqu’elle permet d’effectuée un calcul sur un champ donné. Imaginons par exemple que l’on voudrait savoir la moyenne de chaque élève. Ce calcul nécessite un regroupement des notes par élève. Une requête classique projetterait chaque note de chaque élève, des doublons apparaîtraient pour le champ Elève.Nom.IL faut donc indiquer au moteur de base de données qu’un regroupement est nécessaire, pour qu’il puisse dans un premier temps effectuer la somme des notes pour un élève données, puis dans un second temps diviser le résultat par le nombre de notes.
Ce regroupement est possible par la clause GROUP BY. Une fois le regroupement réalisé, il ne reste plus qu’indiquer qu’elle opération l’on veut réaliser après la clause SELECT.
La clause HAVING est similaire à WHERE à ceci près qu’elle supporte des expressions de regroupement (moyenne, compte….) alors que WHERE ne les supporte pas. En effet HAVING peut sélectionner les enregistrements dont la projection réalisée par SELECT dépend d’un regroupement GROUP BY.
Exemples :
- On voudrait connaître tous les élèves qui ont trois notes
SELECT DISTINCTROW Elève.Nom, Elève.Prénom, Count(Notes.Note) AS [Nombre de Notes] FROM Elève INNER JOIN Notes ON Elève.[N°] = Notes.[N°] GROUP BY Elève.Nom, Elève.Prénom HAVING Count(Notes.Note)=3;
- On voudrait connaître le nombre d’élèves qui ont une note maximum de 14
SELECT DISTINCTROW Count(Elève.Nom) AS [Nombre d’élèves], Max(Notes.Note) AS [Note maximum] FROM Elève INNER JOIN Notes ON Elève.[N°] = Notes.[N°] GROUP BY Notes.note HAVING Max(Notes.Note)=14;
Remarque1 : La clause GROUP BY doit être précédée d’au moins un champ projeté par SELECT (si le champ en question possède une expression de regroupement, cette expression n’est pas mentionnée).
Remarque2 : la clause HAVING doit porter sur un ou plusieurs champs projetés par SELECT, les expressions de regroupement sont concernées.
Les expressions de regroupement :
- Moyenne (Avg)
- Compte (Count)
- Premier et dernier (First,Last)
- Minimum et maximum (Min, Max)
- Ecart-type (StDev), EcartypeP (StDevP) > StDev : écart-type d’échantillon. StDevP : écart-type de population.
- Somme (Sum)
- Variante (Var,VarP) > Var : variance d’échantillon. VarP : Variance de population.
La clause ORDER BY
ORDER BY champ1 ASC ou DESC , champ2 ASC ou DESC …
ASC = Croissant ; DESC = Décroissant > par défaut ASC.
Elle sert à classer un ou plusieurs domaines de valeur pour un champ donnée.Si une table est liée à un autre par une relation 1,N on peut effectuer plusieurs classement. Par exemple on veut la liste des noms des élèves dans l’ordre alphabétique et leurs notes dans l’ordre décroissant.
Exemple :
SELECT DISTINCTROW Elève.Nom, Notes.Note FROM Elève INNER JOIN Notes ON Elève.[N°] = Notes.[N°] ORDER BY Elève.Nom, Notes.Note DESC;