14.Les fonctions d'agrégation
14.1.Introduction
Jusque là, nous avons vu que les bases de données nous permettent de stocker des données, les extraire, les filtrer, les trier et leur appliquer quelques fonctions mathématiques ou autres.
Nous allons voir que les bases de données proposent également des fonctions de type statistiques. Il s'agit en fait de fonctions s'appliquant sur un ensemble d'enregistrements permettant ainsi de compter le nombre d'enregistrement répondant à tels ou tels critères, de déterminer la moyenne des valeurs, de déterminer la plus petite ou la plus grande valeur, etc.
La syntaxe la plus simple est "classique" et de la forme
SELECT fonction(champ) FROM table...
On notera toutefois que la fonction COUNT(), qui permet de déterminer le nombre d'enregistrements ne s'applique pas véritablement à un champ donné, dans ce cas, le nom du champ peut être remplacé par '*'. Ce qui donne:
SELECT COUNT(*) FROM table...
14.2.Les fonctions d'agrégation
Fonction |
Description |
Compatibilité |
AVG(champ) |
retourne la moyenne de "champ" sur l'ensemble des enregistrements |
MySQL PostgreSQL |
BIT_AND(champ) |
retourne le résultat d'un "et logique" appliqué sur l'ensemble des enregistrements |
MySQL |
BIT_OR(champ) |
retourne le résultat d'un "ou logique" appliqué sur l'ensemble des enregistrements |
MySQL |
COUNT(champ) |
retourne le nombre d'enregistrements |
MySQL PostgreSQL |
COUNT(DISTINCT champ) |
retourne le nombre d'enregistrements distincts |
MySQL |
MAX(champ) |
retourne la plus grande valeur de "champ" parmis la liste des enregistrement sélectionnés (s'applique également à des champs alphanumériques) |
MySQL PostgreSQL |
MIN(champ) |
retourne la plus petite valeur parmis la liste des enregistrements sémectionnés (s'applique également à des champs alphanumériques) |
MySQL PostgreSQL |
STD(champ) |
retourne l'ecart-type de "champ" sur l'ensemble des enregistrements |
MySQL |
STDDEV(champ) |
retourne l'ecart-type de "champ" sur l'ensemble des enregistrements |
MySQL |
SUM(champ) |
retourne la somme de "champ" sur l'ensemble des enregistrements |
MySQL PostgreSQL |
14.3.GROUP BY
Notre introduction sur les fonctions d'agrégation laisse à penser que celles-ci ne s'appliquent qu'à l'ensemble des enregistrements sélectionnés par la requête. Il n'en est rien, il s'agissait juste d'une entrée en matière. La notion de fonction d'agrégation prend tout son sens avec l'instruction GROUP BY
Il est en effet, possible de regouper les enregistrements selon un ou plusieurs critères et connaître, en une seule requête, quelques unes de ces données statistiques en fonction de ces critères. Je m'explique... Si vous avez une base de données recensant la couleur préférée d'une population vous pourrez connaitre le nombre de personne préférant telle ou telle couleur par une requête du type
SELECT couleur, COUNT(*) FROM matable GROUP BY couleur
Dans cette requête, les données se regroupées par couleur (via
GROUP BY couleur) et pour chaque couleur nous retournons le nombre d'enregistrements. Le résultat pourra avoir l'allure suivante
couleur |
COUNT(*) |
noir |
5 |
bleu |
20 |
rouge |
15 |
vert |
10 |