Une base pour les exemples
Pour introduire les fonctions de groupement, nous continuons à utiliser la base du tutoriel du site de SQLite.
La base de données utilisée ne présente ici qu'une seule table qui sera la suivante :
| id | nom | age | adresse | salaire |
| 1 | Paul | 32 | California | 20000 |
| 2 | Allen | 25 | Texas | 15000 |
| 3 | Teddy | 23 | Norway | 20000 |
| 4 | Mark | 25 | Rich-Mond | 65000 |
| 5 | David | 27 | Texas | 85000 |
| 6 | Kim | 22 | South-Hall | 45000 |
| 7 | James | 24 | Houston | 10000 |
| 8 | James | 26 | South-Hall | 12000 |
| 9 | Paul | 30 | Texas | 41000 |
Vous pouvez la télécharger ici. Prenez le temps de tester chacune des requêtes proposées ci-après.
Nous voyons ci-dessous quelques exemples concernant les fonctions d'agrégation les plus utilisées. Vous compléterez par la lecture de cette page.
Somme par colonne
Avec la commande suivante :
SELECT adresse, SUM(salaire) FROM COMPANY GROUP BY adresse;
On obtient :
"California","20000"
"Houston","10000"
"Norway","20000"
"Rich-Mond","65000"
"South-Hall","45000"
"Texas","100000"
Les salaires des Texans ont été cumulés, on connaît ainsi le salaire total par état.
Sans regroupement :
SELECT SUM(salaire) FROM COMPANY ;
On obtient le cumul de tous les salaires.
On peut aussi cumuler les salaires satisfaisant une condition. Par exemple, la somme des salaires strictement inférieurs à 45000 :
SELECT SUM(salaire) FROM COMPANY WHERE salaire < 45000 ;
ou encore les sommes de salaires inférieurs à 45000 par état :
SELECT adresse, SUM(salaire) FROM COMPANY WHERE salaire < 45000 GROUP BY adresse;
Pour le Texas, on voit que la somme est 56000 : le salaire de David le texan n'est pas compté puisqu'il ne satisfait pas la contrainte.
Compter
La commande suivante :
SELECT COUNT(*) FROM COMPANY;
retourne le nombre de lignes de la table COMPANY.
La requête
SELECT COUNT( DISTINCT adresse) FROM COMPANY;
donne le nombre d'adresses distinctes de la table.
Pour déterminer le nombre de personnes habitant au Texas:
SELECT COUNT(*) FROM COMPANY WHERE adresse = "Texas";
Le nombre de personnes par État:
SELECT adresse, COUNT(*) FROM COMPANY GROUP BY adresse;
ou le nombre de personnes de chaque âge:
SELECT age, COUNT(*) FROM COMPANY GROUP BY age;
Maximun, minimum
Pour obtenir le salaire maximum :
SELECT MAX(salaire) FROM COMPANY ;
Pour obtenir le salaire maximum par âge :
SELECT age, MAX(salaire) FROM COMPANY GROUP BY age ;
Et le salaire minimum dans l' État du Texas :
SELECT MIN(salaire) FROM COMPANY where adresse = "Texas" ;
Moyenne
Pour obtenir la moyenne des salaires :
SELECT AVG(salaire) FROM COMPANY;
Pour obtenir la moyenne des salaires par âge :
SELECT age, AVG(salaire) FROM COMPANY group by age;
Et la moyenne des salaires dans l' État du Texas :
SELECT AVG(salaire) FROM COMPANY where adresse = "Texas";
Le mot clef having
Avec where, on pose des critères de sélection sur les lignes de la table. Avec le mot clef having, on pose des critères de sélection sur les groupes créés au préalable avec un group by.
Afficher la moyenne des salaires par État lorsque l' État compte au moins deux personnes dans la COMPANY :
SELECT adresse, AVG(salaire) FROM COMPANY GROUP BY adresse HAVING COUNT(*)>1 ;
Page du tutoriel SQLite sur le mot clef having.