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é.
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 |
|--------------|----------|----------|---------|---------|