informatique (tronc commun des prépas scientifiques) · Chapitre 16 · Exercice de TD
Le tableau de bord de la médiathèque
SQL : jointures, agrégation et requêtes imbriquées · niveau 3 (difficile)
Énoncé
Fournir un rapport d'activité de la médiathèque en 5 requêtes SQL distinctes répondant aux indicateurs suivants : (1) Volume : nombre d'emprunts réalisés en octobre 2025. (2) Palmarès : les 3 livres les plus empruntés (toutes périodes confondues), en mentionnant le titre et le nom de l'auteur. (3) Fidélité : les usagers ayant fait strictement plus d'emprunts que la moyenne des emprunts par emprunteur. (4) Alerte : la liste des identifiants des livres n'ayant jamais été empruntés. (5) Démographie : le nombre d'emprunteurs distincts par ville.
Corrigé
-- (1) Volume d'octobre 2025
SELECT COUNT(*) FROM emprunt WHERE jour >= '2025-10-01'; -- Renvoie 5
-- (2) Top 3 des livres les plus empruntés
SELECT titre, nom, COUNT(*) AS nb
FROM emprunt
JOIN livre ON emprunt.id_livre = livre.id_livre
JOIN auteur ON livre.id_auteur = auteur.id_auteur
GROUP BY livre.id_livre, titre, nom
ORDER BY nb DESC, titre LIMIT 3;
-- (3) Usagers au-dessus de la moyenne (moyenne = 10 emprunts / 5 emprunteurs = 2)
SELECT nom, COUNT(*) AS nb
FROM emprunt JOIN usager ON emprunt.id_usager = usager.id_usager
GROUP BY usager.id_usager, nom
HAVING COUNT(*) > 2.0;
-- (4) Livres n'ayant jamais été empruntés
SELECT id_livre FROM livre
EXCEPT
SELECT id_livre FROM emprunt;
-- (5) Nombre d'emprunteurs distincts par ville
SELECT ville, COUNT(DISTINCT emprunt.id_usager) AS emprunteurs
FROM usager JOIN emprunt ON emprunt.id_usager = usager.id_usager
GROUP BY ville;
- (1) Exploite la structure ordonnée des dates textuelles.
- (2) Utilise un tri secondaire par titre pour lever de manière déterministe les ex æquo sur le podium.
- (3) Le seuil () est calculé en faisant le ratio du nombre total d'emprunts par le nombre d'usagers actifs (les usagers ayant au moins un emprunt).
- (4) Repose sur l'opérateur ensembliste de différence
EXCEPT. - (5) Calcule le nombre d'usagers uniques via
COUNT(DISTINCT ...). Notons que les villes sans aucun emprunteur actif ne figureront pas dans le résultat à cause de la jointure interne.
Exercices semblables
WHEREouHAVING? Les quatre combinaisons corrigé- Autojointures corrigé
- Le superlatif par groupe — un vrai piège corrigé
- Le palmarès des villes corrigé
- La moyenne des moyennes n'est pas la moyenne corrigé