menu
Menu

help/index
Index/help


[Retour ligne bleue]
carte


Les fonctions de groupe

Les fonctions de groupe

Dans les exemples précedents, chaque ligne résultat d'un SELECT était le résultat de calculs sur les valeurs d'une seule ligne de la table consultée. Il existe un autre type de SELECT qui permet d'effectuer des calculs sur l'ensemble des valeurs d'une colonne. Ces calculs sur l'ensemble des valeurs d'une colonne se font au moyen de l'une des fonctions suivantes :

 AVG([DISTINCT | ALL] expression)
Renvoie la moyenne des valeurs d' expression.
 COUNT(* | [DISTINCT | ALL] expression)
Renvoie le nombre de lignes du résultat de la requête. Si expression est présent, on ne compte que les lignes pour lesquelles cette expression n'est pas NULL.
 MAX([DISTINCT | ALL] expression)
Renvoie la plus petite des valeurs d'expression.
 MIN([DISTINCT | ALL] expression)
Renvoie la plus grande des valeurs d'expression.
 STDDEV([DISTINCT | ALL] expression)
Renvoie l'écart-type des valeurs d'expression.
 SUM([DISTINCT | ALL] expression)
Renvoie la somme des valeurs
 VARIANCE([DISTINCT | ALL] expression)
Renvoie la variance des valeurs d'expression.
DISTINCT
Indique à la fonction de groupe de ne prendre en compte que des valeurs distinctes.
ALL
Indique à la fonction de groupe de prendre en compte toutes les valeurs, c'est la valeur par défaut.

Exemple : Donner le total des salaires du département 10.

Exemple : Donner le nom, la fonction et le salaire de l'employé (ou des employés) ayant le salaire le plus élevé.

Remarques

Valeurs NULL

Aucune des fonctions de groupe ne tient compte des valeurs NULL à l'exception de count(*). Ainsi, SUM(col) est la somme des valeurs non NULL de la colonne col. De même AVG est la somme des valeurs non NULL divisée par le nombre de valeurs non NULL.

Calcul sur plusieurs groupes

Il est possible de subdiviser la table en groupes, chaque groupe étant l'ensemble des lignes ayant une valeur commune. C'est la clause GROUP BY qui permet de découper la table en plusieurs groupes :
GROUP BY expr_1, expr_2, ...
Si on a une seule expression, ceci définit les groupes comme les ensembles de lignes pour lesquelles cette expression prend la même valeur. Si plusieurs expressions sont présentes les groupes sont définis de la façon suivante : parmi toutes les lignes pour lesquelles expr_1 prend la même valeur, on regroupe celles ayant expr_2 identique, ... Un SELECT de groupe avec une clause GROUP BY donnera une ligne résultat pour chaque groupe.

Exemple : Total des salaires pour chaque département

Remarque : Dans la liste des colonnes résultat d'un SELECT comportant une fonction de groupe, ne peuvent figurer que des caractéristiques de groupe, c'est-à-dire :

Sélection des groupes

De la même façon qu'il est possible de sélectionner certaines lignes au moyen de la clause WHERE, il est possible dans un SELECT comportant une fonction de groupe de sélectionner par la clause HAVING, qui se place après la clause GROUP BY.

Le prédicat dans la clause HAVING suit les mêmes règles de syntaxe qu'un prédicat figurant dans une clause WHERE.

Cependant, il ne peut porter que sur des caractéristiques du groupe : fonction de groupe ou expression figurant dans la clause GROUP BY, dans ce cas la clause HAVING doit être placée après la clause GROUP BY.

Exemple : Donner la liste des salaires moyens par fonction pour les groupes ayant plus de deux employés.

Remarque : Un SELECT de groupe peut contenir à la fois une clause WHERE et une clause HAVING. La clause WHERE sera d'abord appliquée pour sélectionner les lignes, puis les groupes seront constitués à partir des lignes sélectionnées, et les fonctions de groupe seront évaluées.

Exemple : Donner le nombre d'ingénieurs ou de commerciaux des départements ayant au moins deux employés de ces catégories.

Une clause HAVING peut comporter une sous-interrogation.

Exemple : Quel est le département ayant le plus d'employés?

Fonction de groupe à deux niveaux

Il est possible d'appliquer au résultat d'un SELECT avec GROUP BY un deuxième niveau de fonction de groupe.

Exemple : la fonction MAX peut être appliquée aux nombres d'employés de chaque département pour obtenir le nombre d'employés du département ayant le plus d'employés.

ATTENTION .....    exercicesExercices


© nasrlarbi@free.fr

Dernière modification :