Agrégats

DéfinitionAgrégat

Un agrégat est un partitionnement horizontal d'une table en sous-tables, en fonction des valeurs d'un ou plusieurs attributs de partitionnement, suivi de l'application d'une fonction de calcul à chaque attribut des sous-tables obtenues.

Syntaxe

1
SELECT <liste d'attributs de partionnement à projeter et de fonctions de calcul>
2
FROM <liste de relations>
3
WHERE <condition à appliquer avant calcul de l'agrégat>
4
GROUP BY <liste ordonnée d'attributs de partitionnement>
5
HAVING <condition sur les fonctions de calcul>

Exemple

1
SELECT Societe.Nom, AVG(Personne.Age)
2
FROM Personne, Societe
3
WHERE Personne.NomSoc = Societe.Nom
4
GROUP BY Societe.Nom
5
HAVING Count(Personne.NumSS) > 10

Cette requête calcul l'âge moyen du personnel pour chaque société comportant plus de 10 salariés.

RemarqueRestriction

Une restriction peut être appliquée avant calcul de l'agrégat, au niveau de la clause WHERE, portant ainsi sur la relation de départ, mais aussi après calcul de l'agrégat sur les résultats de ce dernier, au niveau de la clause HAVING.

AttentionProjection

Si dans la clause SELECT, un attribut est projeté directement, sans qu'une fonction lui soit appliquée, alors il faut impérativement que cet attribut apparaisse dans la clause GROUP BY (car ce ne peut être qu'un attribut de partitionnement).

RemarqueFonctions de calcul sans partitionnement

Si une ou plusieurs fonctions de calcul sont appliquées sans partitionnement, le résultat de la requête est un tuple unique.

RemarqueIntérêt de la clause GROUP BY

Pour que l'utilisation de la clause GROUP BY ait un sens, il faut qu'au moins une fonction de calcul soit utilisée, soit dans la clause SELECT, soit dans la clause HAVING.

RemarqueContrôle imposé par quelques SGBDR

Notons que dans le cas de certains SGBDR[1] (par exemple Oracle), l'ensemble des attributs de l'agrégation (clause GROUP BY) doivent être préalablement projetés (donc déclarés dans la clause SELECT).