Agréger, grouper

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.