SQL : Regroupements

Clause GROUP BY

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é.

SELECT MIN(Dtnaiss) AS "Plus jeune", MAX(Dtnaiss) AS "Plus âgé"
FROM ETUDIANT;

- Afficher le nombre total d'étudiants

SELECT COUNT(*)
FROM ETUDIANT;

Tester les exemples

Sommaire SQL

Fonctions statistiques et clause GROUP BY

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 : "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.

Tester les exemples

Sommaire SQL

Q07 : Afficher pour chaque étudiant, identifié par son nom, le nombre total de notes qu'il a obtenues.

Sommaire SQL

Q08 : Afficher le nom des étudiants qui ont moins de 4 notes.

Sommaire SQL

Q09 : Afficher le nom du premier et du dernier étudiant sur la liste alphabétique.

Sommaire SQL

Q10 : Afficher pour chaque matière (numéro) le nombre d'étudiants qui ont une note.

Section suivante | Section précédente | Sommaire SQL