Les fonctions agrégatives (ou statistiques)
En SQL, il existe des fonctions qui donnent une valeur agrégée calculée pour les lignes sélectionnées :
-
COUNT(*)
: donne le nombre de lignes sélectionnées -
COUNT(colonne)
: donne le nombre de valeurs de la colonne -
AVG(colonne)
: donne la moyenne des valeurs de la colonne -
SUM(colonne)
: donne la somme des valeurs de la colonne -
MIN(colonne)
: donne le minimum des valeurs de la colonne -
MAX(colonne)
: donne le maximum des valeurs de la colonne -
Remarque : La colonne peut être remplacée par une expression arithmétique.
Exemples
Exemple 1
1SELECT SUM(stock * prix) AS 'Valeur du stock' FROM Produits;
Produits |
---|
Valeur du stock |
16300 |
Pour info :
1SELECT stock * prix AS 'Valeurs des stocks' FROM Produits;
Produits |
---|
Valeurs des stocks |
750 |
3000 |
12000 |
150 |
400 |
Exemple 2
Donner la répartition (moyenne, écart maximum, nombre) des montants des comptes des clients
1SELECT AVG(Compte) AS 'Moyenne',2 MAX(Compte) - MIN(Compte) AS 'Écart max',3 COUNT(*) AS 'Nombre de clients'4FROM Clients;
Clients | ||
---|---|---|
Moyenne | Écart max | Nombre de clients |
14666.444444444445 | 125094 | 9 |
Remarques
Remarques
Count
Supposons que l’on veuille obtenir le nombre de clients ayant passés au moins une commande
Requête erronée
1SELECT COUNT( numeroClient ) FROM Commandes ;
Produits |
---|
COUNT( numeroClient ) |
7 |
Cette requête affiche le nombre de commandes, pas le nombre de clients ! Car :
1SELECT numeroClient FROM Commandes ;
Produits |
---|
numeroClient |
1 |
1 |
3 |
4 |
5 |
5 |
4 |
contient bien 7 lignes, mais répètent les numéros de clients.
Requête correcte
1SELECT COUNT( DISTINCT numeroClient ) FROM Commandes;
Produits |
---|
COUNT( DISTINCT numeroClient ) |
4 |
Ensemble vide
Quelle est la valeur retournée par une fonction agrégative produit à partir d’un ensemble vide ?
Réponse : 0
pour la fonction COUNT
et inconnu pour les autres
1SELECT2 COUNT (*) AS 'Nombre',3 SUM(compte) AS 'Somme',4 MAX (categorie) AS 'Max'5FROM Clients6WHERE ville = 'Rouen';
Produits | ||
---|---|---|
Nombre | Somme | Max |
0 |