Questions avancées en SQL

A la fin de chaque année, le service marketing établit un ensemble d'états qui permettent d'analyser le profil de leurs clients (leurs préférences, leur pouvoir d'achat, etc.) et d'ajuster l'offre de l'association en conséquence.

Question

Écrivez une requête SQL LMD pour calculer pour chaque produit, le nombre d'articles vendus, trié par ordre décroissant.

Indice

Utilisez la fonction SUM appliquée à la quantité sum(t.qte), la clause GROUP BY pour faire les calculs par produit, et la clause ORDER BY pour le tri.

Solution

1
select p.num, p.designation, sum(lf.qte) as nb
2
from produit p, ligne_fact lf
3
where lf.produit=p.num
4
group by p.num, p.designation
5
order by nb desc;

Question

Ecrivez une requête SQL LMD pour calculer les chiffres d'affaire par client, triés par ordre décroissant.

Indice

Utilisez la fonction SUM appliquée au produit du prix et de la quantité (sum(t1.prix*t2.qte)), la clause GROUP BY pour faire les calculs par client, et la clause ORDER BY pour le tri.

Solution

1
select c.num, c.nom, c.prenom, sum(p.prix*lf.qte)
2
from client c, produit p, facture f, ligne_fact lf
3
where p.num=lf.produit
4
and lf.facture=f.num
5
and f.client=c.num
6
group by c.num, c.nom, c.prenom
7
order by sum(p.prix*lf.qte) DESC;

Question

Ecrivez une requête SQL LMD pour calculer le montant moyen des factures pour chaque client, trié par ordre croissant.

Indice

Vous pouvez utiliser les sous-requêtes dans la clause FROM pour traiter la question en deux étapes.

Solution

1
select client, avg(montant) moy
2
from (
3
  select c.num as client, f.num, sum(lf.qte*p.prix) as montant
4
  from facture f, ligne_fact lf, client c, produit p
5
  where lf.facture=f.num and lf.produit=p.num and f.client=c.num
6
  group by c.num, f.num
7
)
8
group by client
9
order by moy;

Question

Écrivez deux requêtes SQL LMD pour obtenir la liste des produits dont le prix est maximal et dont le prix est minimal.

Indice

Utilisez une sous-requête d'existence de type IN.

Solution

1
select distinct designation "PRIX MAX"
2
from produit
3
where prix in (select max(prix) from produit);
1
select distinct designation "PRIX MIN"
2
from produit
3
where prix in (select min(prix) from produit);