Fonctions agrégat |
Les fonctions agrégat renvoient une seule valeur déterminée à partir d´un ensemble d´autres valeurs. Si elle est utilisée dans plusieurs autres expressions de la liste d´éléments d´une instruction SELECT, cette instruction SELECT doit inclure une clause GROUP BY. La clause GROUP BY n´est pas requise si la fonction agrégat est la seule valeur récupérée par l´instruction SELECT. Les fonctions agrégat prises en charge et leur syntaxe spécifique sont répertoriées dans le Tableau 4.1.
Fonctions agrégat SQL99
Fonction | Usage
--- | ---
AVG(expression) | Calcule la valeur moyenne d´une colonne sur la base d´expression
COUNT(expression) | Compte les lignes définies par expression
COUNT(*) | Compte toutes les lignes de la table ou de la vue spécifiée
MIN(expression) | Recherche la valeur minimale d´une colonne sur la base d´expression
MAX(expression) | Recherche la valeur maximale d´une colonne sur la base d´expression
SUM(expression) | Calcule la somme des valeurs d´une colonne sur la base d´expression
D´un point de vue technique, ANY, EVERY et SOME sont assimilées à des fonctions agrégat. Cependant, leur présentation est incluse dans le cadre des critères de recherche de plage, puisqu´il s´agit là de leur utilisation principale. Reportez-vous à la rubrique SELECT . . . WHERE du chapitre précédent pour plus de détails sur ces fonctions. Le nombre de valeurs qu´une fonction agrégat peut traiter varie en fonction du nombre de lignes consultées dans la table. Sous cet angle, les fonctions agrégat diffèrent des fonctions scalaires, qui exigent un nombre et un type fixes de paramètres. Une fonction agrégat respecte normalement la syntaxe suivante:
    aggregate_function_name ( [ALL | DISTINCT] expression )
Le nom de la fonction agrégat peut être AVG, COUNT, MAX, MIN ou SUM. La clause ALL , qui correspond au comportement par défaut et n´exige réellement aucune spécification, évalue toutes les lignes avant de déterminer la valeur d´agrégat de la fonction. La clause DISTINCT évalue uniquement la fonction sur la base de valeurs distinctes.

AVG et SUM |
La fonction AVG calcule la moyenne des valeurs d´une colonne ou d´une expression. SUM calcule la somme. Ces deux fonctions exigent des valeurs numériques et elles ignorent les valeurs NULL. Elles permettent également de calculer la moyenne ou la somme de toutes les valeurs distinctesd´une colonne ou d´une expression. AVG et SUM sont prises en charge par Microsoft SQL Server, MySQL, Oracle et PostgreSQL.
Exemple
La requête qui suit calcule le chiffre moyen des ventes cumulées pour chaque type de livre:
    SELECT   type, AVG( ytd_sales ) AS "average_ytd_sales"
    FROM     titles
    GROUP BY type;
La requête qui suit renvoie le chiffre moyen des ventes cumulées pour chaque type de livre:
    SELECT   type, SUM( ytd_sales )
    FROM     titles
    GROUP BY type;

COUNT |
La fonction COUNT propose trois variations. COUNT(*) compte toutes les lignes de la table cible, même si elles incluent des valeurs null. COUNT(expression) calcule le nombre de lignes contenant des valeurs non NULL dans une colonne ou une expression spécifique. COUNT(DISTINCT expression) calcule le nombre de valeurs non NULL distinctes dans une colonne ou une expression.
Exemples
Cette requête compte toutes les lignes d´une table:
    SELECT COUNT(*) FROM publishers;
La requête qui suit recherche le nombre de pays différents dans lesquels des éditeurs sont implantés:
    SELECT COUNT(DISTINCT country) "Count of Countries"
    FROM   publishers

MIN et MAX |
MIN(expression) et MAX(expression) recherchent la valeur minimale et maximale (chaîne, date/heure ou numérique) d´un ensemble de lignes. DISTINCT ou ALL peuvent s´utiliser avec ces fonctions, sans toutefois en affecter le résultat. MIN et MAX sont prises en charge par Microsoft SQL Server, MySQL, Oracle et PostgreSQL. MySQL prend également en charge les fonctions LEAST( ) et GREATEST( ), qui assurent les mêmes fonctionnalités.
Exemples
La requête qui suit recherche le meilleur et le pire chiffre des ventes pour les titres consignés:
    SELECT  'MIN' = MIN(ytd_sales), 'MAX' = MAX(ytd_sales)
    FROM    titles;
Les fonctions agrégat s´utilisent souvent dans la clause de requête HAVING avec GROUP BY. La requête qui suit sélectionne chacune des catégories (types) de livres dont le prix global moyen est supérieur à 15,00 dollars:
    SELECT  type 'Category', AVG( price ) 'Average Price'
    FROM    titles
    GROUP BY type
    HAVING AVG(price) > 15