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