5.5 Extraction de données groupées
109
© Dunod – La photocopie non autorisée est un délit.
Dans cette requête, la condition having peut porter sur les éléments cités dans la
clause select, mais aussi sur toute autre fonction d’agrégation calculable sur
chaque groupe.
La requête suivante traite les lignes de COMMANDE en les regroupant par client :
select NCLI, count(*)
from
COMMANDE
group by NCLI
On a donc reconstitué des clients à partir des commandes. On ne retient ensuite que
les groupes d’au moins deux commandes :
select NCLI, count(*)
from
COMMANDE
group by NCLI
having count(*) >= 2
Dans le résultat on ne considère ensuite, avant groupement, que les commandes
spécifiant le produit PA45. En clair, on s’intéresse aux clients qui ont commandé au
moins deux fois le produit PA45 (soit ici l’unique client C400).
select NCLI, count(*)
from
COMMANDE
where NCOM in ( select NCOM
from
DETAIL
where NPRO = 'PA45')
group by NCLI
having count(*) >= 2
5.5.3 Groupes et jointures
Il est possible d’obtenir en outre la quantité totale de ce produit PA45 que chaque
client a commandée. Les données à afficher appartenant à plusieurs tables (NCLI et
somme des QCOM), il nous faut opérer un groupement sur le résultat de la jointure
de COMMANDE et DETAIL. On observera que la sous-requête est remplacée par une
condition de jointure 37 .
select M.NCLI, count(*), sum(QCOM)
from
COMMANDE M, DETAIL D
where M.NCOM = D.NCOM
LOCALITE
count(*)
avg(COMPTE)
Poitiers
Namur
Toulouse
3
4
5
533.33
-2520.00
-2530.00
37. Pourquoi ?
109
© Dunod – La photocopie non autorisée est un délit.
Dans cette requête, la condition having peut porter sur les éléments cités dans la
clause select, mais aussi sur toute autre fonction d’agrégation calculable sur
chaque groupe.
La requête suivante traite les lignes de COMMANDE en les regroupant par client :
select NCLI, count(*)
from
COMMANDE
group by NCLI
On a donc reconstitué des clients à partir des commandes. On ne retient ensuite que
les groupes d’au moins deux commandes :
select NCLI, count(*)
from
COMMANDE
group by NCLI
having count(*) >= 2
Dans le résultat on ne considère ensuite, avant groupement, que les commandes
spécifiant le produit PA45. En clair, on s’intéresse aux clients qui ont commandé au
moins deux fois le produit PA45 (soit ici l’unique client C400).
select NCLI, count(*)
from
COMMANDE
where NCOM in ( select NCOM
from
DETAIL
where NPRO = 'PA45')
group by NCLI
having count(*) >= 2
5.5.3 Groupes et jointures
Il est possible d’obtenir en outre la quantité totale de ce produit PA45 que chaque
client a commandée. Les données à afficher appartenant à plusieurs tables (NCLI et
somme des QCOM), il nous faut opérer un groupement sur le résultat de la jointure
de COMMANDE et DETAIL. On observera que la sous-requête est remplacée par une
condition de jointure 37 .
select M.NCLI, count(*), sum(QCOM)
from
COMMANDE M, DETAIL D
where M.NCOM = D.NCOM
LOCALITE
count(*)
avg(COMPTE)
Poitiers
Namur
Toulouse
3
4
5
533.33
-2520.00
-2530.00
37. Pourquoi ?
