Cette clause permet de créer des
sous-ensembles (regroupements) de lignes pour lesquels la valeur
d'une (ou plusieurs) colonne est identique. Cette clause est liée
à l'utilisation de fonctions statistiques
qui seront appliquées sur les sous-ensembles définis
par GROUP BY.
- Regroupement par grade des enseignants
SELECT Grade FROM ENSEIGNANT GROUP BY Grade;
Cette requête va créer autant
de sous-ensembles que de valeurs possibles de l'attribut Grade.
Ici 3 sous-ensembles : ASS, MCF, PR.
Clause
HAVING
Cette clause, contrairement à la
clause WHERE qui précise les conditions à appliquer
sur les lignes d'une table, permet de préciser des conditions
au niveau des sous-ensembles créés par GROUP BY.
- Regroupement par grade des enseignants
de type 'ASS'
SELECT Grade FROM ENSEIGNANT GROUP BY Grade HAVING Grade='ASS';
Fonctions
statistiques
Fonctions
Rôle
COUNT([DISTINCT] expr [alias]
Renvoie le nombre de valeurs dans la colonne.
Si DISTINCT est précisé, les doublons sont éliminés.
COUNT(*)
Compte toutes les lignes de la table.
AVG(expr [alias])
Renvoie la moyenne des valeurs de la colonne
spécifiée.
MIN(expr [alias])
Renvoie la plus petite valeur de la colonne
spécifiée.
MAX(expr [alias])
Renvoie la plus grande valeur de la colonne
spécifiée.
SUM(expr [alias])
Renvoie la somme des valeurs de la colonne
spécifiée.
- Afficher la date de naissance de
l'étudiant le plus jeune et de l'étudiant le plus
âgé.
SELECTMIN(Dtnaiss) AS
"Plus jeune", MAX(Dtnaiss) AS "Plus âgé" FROM ETUDIANT;
Les fonctions statistiques opèrent sur un
ensemble de données et renvoient une valeur unique. D'une manière
générale, lorsqu'un attribut est sélectionné dans une clause SELECT
le résultat pourra comporter de zéro à n valeurs ce qui peut provoquer
des conflits lorsque l'on utilise conjointement des fonctions statistiques
qui elles ne renvoient qu'une seule valeur.
L'ordre SELECT suivant, supposé calculer
la moyenne des notes par étudiant, est donc incorrect
et va générer l'erreur d'exécution caractéristique
: "Invalid column reference"
SELECT Numetu, AVG(Note) FROM NOTES;
La formulation correcte est :
SELECT Numetu, AVG(Note) FROM NOTES GROUP BY Numetu;
Dans ce cas, un sous-ensemble va être
créé pour chaque numéro étudiant et
la moyenne sera calculée au niveau du sous-ensemble.