Vous êtes sur la page 1sur 20

Algèbre relationnelle et SQL

Fonctions d’agrégation et regroupement

M1 Gestion

Alain Berro
Exemple
Client NumCli NomCli RueCli CPCli VilleCli
C1 TOTO Rue Banc 31000 Toulouse
C2 TITI Rue Deux 31700 Saint Gaudens
C3 TOTO Rue Gir 33000 Bordeaux
C4 LULU Rue Bis 64000 Pau
C5 TATA Rue Elle 31500 Toulouse
Produit NumProd Desig PU
LigneF NumFact# NumProd# Qte
P1 Veste T50 300 F1 P1 1
P2 Pantalon T40 45 F1 P2 2
P3 Chemise T40 45 F1 P3 1
P4 Chaussure T43 75 F1 P4 2
P5 Veste T52 300 F2 P1 1
F3 P2 2
Livrer NumFact# NumLiv# NumProd# DateLiv
F3 1 P2 12/01/2002 F3 P3 3
F2 2 P1 28/01/2002 F4 P3 35
F3 2 P3 15/02/2002
Facture NumFact DateF NumCli#
F1 02/01/2002 C1
Livreur NumLiv RaisonSoc Tel
F2 15/01/2002 C2
1 Rapid-Liv 0562262626 F3 28/01/2002 C1
2 ExpressLiv 0531323334 F4 05/02/2002 C3
2
Fonctions d’agrégation en SQL
• Définition
– Les fonctions d’agrégation dans le langage SQL
permettent d’effectuer des opérations statistiques sur
un ensemble de valeurs d’un même attribut (colonne).
– Count : compte le nombre de valeurs non vides d’une colonne
– Sum : additionne les valeurs d'une colonne
– Avg : effectue la moyenne des valeurs d'une colonne
– Min : renvoie la plus petite valeur d'une colonne
– Max : renvoie la plus grande valeur d'une colonne
– Exemples
• Quel est le nombre de clients ?
SELECT Count (NumCli)
FROM Client ;
• Quel est le plus petit prix de produit ?
3
Partition d’ensemble en SQL
• Clause GROUP BY (regroupement)
– Principe
• Permet de créer des partitions d'ensembles et ainsi de
pouvoir faire des calculs sur chaque partie de la partition.
• S’utilise après une clause WHERE.
– Exemples
• Pour chaque client, combien de commandes/factures a-t-il
effectuées ?
SELECT Count (NumFact)
FROM Facture
GROUP BY NumCli ;
• Pour chaque facture, combien de produits différents ont été
commandés/facturés ?

4
Partition d’ensemble en SQL
– Remarques
• SELECT contient des fonctions d’ensembles ou des attributs
contenus dans GROUP BY.
• GROUP BY contient les attributs non calculés du SELECT
(servant au regroupement) éventuellement complétés d’une
clé primaire.
– Exemples
• Pour chaque client (numéro et nom), combien de
commandes/factures a-t-il effectuées ?
SELECT Client.NumCli, NomCli, Count (NumFact)
FROM Client, Facture
WHERE Client.NumCli = Facture.NumCli
GROUP BY Client.NumCli, NomCli ;
• Pour chaque facture (numéro et date), combien de produits
différents ont été commandés/facturés ?

5
Partition d’ensemble en SQL
• Clause HAVING
– Principe
• Introduit un critère de sélection à appliquer aux lignes d'une
partition et à non d'une relation entière.
• Se place après un GROUP BY.
– Exemple
• Quels clients ont passé au moins 2 commandes/factures ?
SELECT Count (NumFact)
FROM Facture
GROUP BY NumCli
HAVING Count (Numfact) >=2 ;

6
Partition d’ensemble en SQL
– Remarque : WHERE / HAVING
• WHERE : condition de sélection sur l’ensemble des lignes
d’une table
• HAVING : condition de sélection sur les lignes d’une partition
• Combinaison possible

7
Algèbre relationnelle
• Partition/regroupement et agrégation
– Permet de regrouper toutes les lignes d’une table qui
ont les mêmes valeurs pour certains champs, dans le
but de faire des calculs sur celles-ci (en utilisant des
fonctions d’agrégation) puis d’appliquer un critère de
sélection éventuel sur le résultat.
I

Champ(s) Champ_k
regrouper fonctionAgrég
critère

8
Algèbre relationnelle
• Partition/regroupement et agrégation
Table I a b c Regrouper les a b c
en entrée 100 oui 10 lignes d’après 100 oui 10
200 non 20 le champ c 300 non 10
300 non 10 600 non 10
400 oui 30 400 oui 30
500 non 20 200 non 20
600 non 10 500 non 20
Compter le nombre
c a de valeurs non vides
regrouper compter pour le champ a dans
Garder seulement chaque groupe
<=2
les lignes où
c compter_a
compter(a) <= 2
Table R c compter_a 10 3
résultat 30 1 30 1
20 2 20 2

9
De l’algèbre relationnelle au SQL
• Partition/regroupement et agrégation

Champ(s) Champ_k
regrouper fonctionAgrég
critère

SELECT Champ(s), fonctionAgreg (Champ_k) AS alias_champ


FROM I
GROUP BY Champ(s)
HAVING fonctionAgreg (Champ_k) critère ;
10
Exercice : BD géo
• Modèle relationnel
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)
– Ecrivez les requêtes suivantes en algèbre relationnelle et SQL
11. Trouvez le nombre d’espaces maritimes qui côtoient chaque pays.
12. Trouvez le nombre de pays côtoyés par chaque espace maritime.
13. Trouvez la distance totale couverte par chaque fleuve dans les pays qu’il
traverse.
14. Trouvez les distances minimales, maximales et moyennes couvertes par
chaque fleuve dans les pays qu’il traverse.
15. Idem 14, mais en ne considérant que les fleuves qui traversent plus d’un
pays.
11
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)

11. Trouvez le nombre d’espaces maritimes qui côtoient chaque pays.

COTOYER
SELECT
P_Nom EM_Nom
regrouper compter

12
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)

12. Trouvez le nombre de pays côtoyés par chaque espace maritime.

COTOYER
SELECT
EM_Nom P_Nom
regrouper compter

13
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)

13. Trouvez la distance totale couverte par chaque fleuve dans les
pays qu’il traverse.

TRAVERSER SELECT

F_Nom distance
regrouper somme

R
14
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)

14. Trouvez les distances minimales, maximales et moyennes


couvertes par chaque fleuve dans les pays qu’il traverse.

TRAVERSER SELECT

F_Nom distance distance distance


regrouper moyenne min max

R
15
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)

15. Idem 14, mais en ne considérant que les fleuves qui traversent
plus d’un pays.

TRAVERSER SELECT

F_Nom distance distance distance P_Nom


regrouper moyenne min max compter
>1

R 16
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)

16. Trouvez le nombre d’espace maritimes enregistrés.

ESPACES_MARITIMES
SELECT
EM_Nom
count

17
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)

17. Idem 12, et le type de chaque espace maritime doit être affiché.

COTOYER ESP_MAR
COTOYER.EM_Nom
= ESP_MAR.EM_Nom SELECT
R1

COTOYER.EM_Nom, EM_Type P_Nom


regrouper compter

R2
18
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)

18. Nom du fleuve le plus petit.

FLEUVES
FLEUVES

F_Longueur = SELECT
F_Longueur
min
F_Nom

R1
19
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)

19. Nom des pays plus grands que la superficie moyenne des pays.

PAYS
PAYS

P_Superficie > SELECT


P_Superficie
avg
P_Nom

R1
20

Vous aimerez peut-être aussi