C'était juste pour faire l'énumération des fonctions d'agrégation !
Puisque l'on demande une moyenne, avg() suffit amplement.
Version imprimable
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.
CordialementCode:
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
CordialementCode:
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.