Vous êtes ici : Accueil > Archives > Tutoriels > SQL standard > Manipulation de données : fonctions de groupe

< Retour

Manipulation de données : fonctions de groupe

mises à jour : 24.08.2004, 09.08.2005

V.1 > Calculs sur un seul groupe.

> À l'exception de « COUNT », les fonctions n'opèrent leurs calculs que sur les valeurs non nulles. La clause « DISTINCT » permet encore d'affiner cela et de ne calculer que sur les valeurs différentes et non nulles.
> Les fonctions ne retournent qu'une seule ligne si elles sont seules dans la clause « SELECT ». Voir plus bas le chapitre Calculs sur plusieurs groupes si vous souhaitez s�lectionner plusieurs colonnes.

V.1.a > COUNT : compter le nombre d'�l�ments

SELECT COUNT( champ ) FROM table [ WHERE ... ];

> Permet de compter le nombre de tuple r�pondant aux eventuels pr�dicats.
exemples :

# combien y'a t'il de Dupont dans la table de personnes ?
SELECT COUNT( nom ) FROM personnes WHERE nom LIKE 'Dupont';

# combien y'a-t'il tous simplement de personnes dans cette fameuse table de personnes ?!
SELECT COUNT( * ) FROM personnes;


V.1.b > AVG : moyenne de valeurs

SELECT AVG( champ ) FROM table [ WHERE ... ];

exemple :

# moyenne d'age des personnes
SELECT 'Moyenne', AVG( age ) FROM personnes;


V.1.c > SUM : somme de valeurs

SELECT SUM( champ ) FROM table [ WHERE ... ];

exemple :

# Masse salariale : somme de tout les salaires
SELECT SUM( salaire ) FROM employes;


V.1.d > MIN : valeur minimale

SELECT MIN( champ ) FROM table [ WHERE ... ];

exemple :

SELECT '+Jeune', MIN( age ) FROM personnes;


V.1.e > MAX : valeur maximale

SELECT MAX( champ ) FROM table [ WHERE ... ];

exemple :

SELECT '+vieux', MAX( age ) FROM personnes;


le Langage de Manipulation : Fonctions de groupe

Calculs sur un seul groupe

Il est possible d'effectuer des calculs sur l'ensemble des lignes d'une colonne. Les fonctions les plus courantes sont :

AVG (moyenne)
SUM (somme)
MIN (valeur minimum)
MAX (valeur maximale)
COUNT (nombre d'éléments)

syntaxe :

SELECT function(field) FROM table;

Les fonctions n'opèrent leurs calculs que sur les valeurs non nulles. La clause DISTINCT permet encore d'affiner cela et de ne calculer que sur les valeurs différentes et non nulles.

Exemples :

# Nombre d'éléments dans la table 'personnes'
SELECT COUNT(personne_id) FROM personnes;
SELECT COUNT(*) FROM personnes;


# Moyenne d'age, plus jeune et plus vieux
SELECT 'Moyenne', AVG(age), '+Jeune', MIN(age), '+vieux', MAX(age) FROM personnes;

# nombre de services distincts dans la table 'employés'
SELECT COUNT(DISTINCT ref_service) FROM employes;

Une seule ligne de résultat est retournée. Il est donc un peu inutile de choisir d'autres colonnes, car comment savoir si la valeur retournée est pertinente, hein ?! La suite vous expliquera que l'on peut tout de même avoir un résultat un tant soit peu plus élaboré.

Calculs sur plusieurs groupes

Les calculs sur groupes sont pratiques si l'on souhaite faire des statistiques, ou quelque chose de très proche. le mieux est d'avoir un exemple : pour chacun des services, on souhaiterai avoir l'effectif, l'age moyen, le salaire maximum et minimum.

Cela donne donc :

SELECT nom_service, COUNT(personne_id) AS effectif, AVG(age) AS agemoyen, MAX(salaire), MIN(salaire) FROM services, employes WHERE services.service_id=employes.service_id GROUP BY services.service_id, nom_service ;

Important : lorsque on utilise la clause GROUP BY, toutes les colonnes du SELECT qui ne sont pas des fonctions de groupes doivent être ré-écrites dans le GROUP BY, en plus d'éventuelles autres colonnes ! Voir l'exemple ci-dessus, on choisi le nom de service, mais on regroupe sur le numéro de service ET aussi (surtout !) sur le nom de service. Et le résultat retournera ceci :

|--------------|----------|----------|---------|---------|
| nom_service | effectif | agemoyen | salaire | salaire |
|--------------|----------|----------|---------|---------|
| Comptabilité | 2 | 37 | 950 | 880 |
| Informatique | 3 | 25 | 975 | 910 |
|--------------|----------|----------|---------|---------|


>> Requête d'insertion.