Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille
Désolé effectivement je n'avais pas saisis que vous me montriez les différents exemples.
Mais là je ne vais pas répondre exactement à la question qui est demandé.
On me demande de calculer le nombre moyen d'emprunt par abonné.
Un abonné peut n'avoir jamais rien emprunté donc avoir une moyenne à 0.
J'ai donc utilisé un OUTER JOIN pour faire apparaitre tous les matricules des abonnés.
Après j'essaye de mettre ceux pour qui rien n'a été emprunté (qui apparaissent à null) à la valeur 0.
Je n'arrive pas à affecter cette valeur COALESCE() ?
Après je n'arrive toujours pas à faire la moyenne, parce que si je fais seulement AVG() sur NbEmprunt cela va faire la moyenne sur toute la colonne.
Cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT NbEmprunt FROM( SELECT ABONNE.Matricule, COALESCE(COUNT(*), 0) AS NbEmprunt FROM biblio.Emprunter INNER JOIN biblio.ABONNE ON Emprunter.Matricule = ABONNE.Matricule GROUP BY ABONNE.Matricule) AS Calcul RIGHT OUTER JOIN biblio.ABONNE ON Calcul.Matricule = ABONNE.Matricule;
Mathieu
Les murs de mon immeuble ont tremblé,
Je crois avoir trouvé la requête, pauvres voisins
Cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT ABONNE.Matricule, ROUND((NbEmprunt / (SELECT COUNT(*) FROM biblio.Emprunter) * 100), 2) FROM( SELECT ABONNE.Matricule, COALESCE(COUNT(*), 0) AS NbEmprunt FROM biblio.Emprunter INNER JOIN biblio.ABONNE ON Emprunter.Matricule = ABONNE.Matricule GROUP BY ABONNE.Matricule) AS Calcul RIGHT OUTER JOIN biblio.ABONNE ON Calcul.Matricule = ABONNE.Matricule ORDER BY ABONNE.Matricule;
Mathieu
C'est un très bon réflexe que de se poser la question des valeurs NULL, EXCELLENT!
Mais reprenons tout doucement.
Le choix est de considérer le nombre total des emprunts d'un abonné.
Si un abonné n'a jamais rien emprunté, on veut effectivement obtenir un nombre total d'emprunts à 0 pour lui.
Ensuite on calcule une moyenne sur ces emprunts considérés par abonné (et pas par mois, ou par catégorie de livres).
Le nombre des emprunts de chaque abonné doit se trouver dans la sous-requête.
C'est donc dans cette dernière que l'on fait la jointure externe, sinon on obtiendra zéro ligne pour les abonnés qui n'ont rien emprunté, au lieu d'obtenir une ligne pour chacun de ces abonnés avec un nombre d'emprunts à zéro. C'est sûr que pour la moyenne, cela ne donne pas la même chose !
Attention, c'est un pourcentage que tu fais dans la dernière requête, pas une moyenne.
On peut aussi faire brutalement le total des emprunts/total des abonnés.
Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager