IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Gestion d'une bibliothèque - difficultés avec GROUP BY


Sujet :

Requêtes MySQL

  1. #21
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Citation Envoyé par __mathieu__ Voir le message
    J'ai peut être répondu un peu vite, ce n'est pas avec le MIN et le MAX que l'on calcule une moyenne.
    La population peut être décentrée par rapport au milieu de l'intervalle.
    C'était juste pour faire l'énumération des fonctions d'agrégation !
    Puisque l'on demande une moyenne, avg() suffit amplement.
    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

  2. #22
    Membre du Club
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2020
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2020
    Messages : 77
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Paraffine Voir le message
    C'était juste pour faire l'énumération des fonctions d'agrégation !
    Puisque l'on demande une moyenne, avg() suffit amplement.
    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.

    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;
    Cordialement

    Mathieu

  3. #23
    Membre du Club
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2020
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2020
    Messages : 77
    Points : 41
    Points
    41
    Par défaut
    Les murs de mon immeuble ont tremblé,
    Je crois avoir trouvé la requête, pauvres voisins

    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;
    Cordialement

    Mathieu

  4. #24
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Citation Envoyé par __mathieu__ Voir le message
    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.
    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

  5. #25
    Membre du Club
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2020
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2020
    Messages : 77
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Paraffine Voir le message
    C'est un très bon réflexe que de se poser la question des valeurs NULL, EXCELLENT!

    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.
    Je viens de renvoyer le devoir
    Tant pis j'aurai une erreur sur cette partie mais merci beaucoup malgré tout et pour tous vos conseils et remarques.

Discussions similaires

  1. Gestion d'une bibliothèque
    Par mimosa803 dans le forum Diagrammes de Classes
    Réponses: 5
    Dernier message: 30/05/2013, 09h35
  2. BiblioISSATS : Gestion d'une bibliothèque universitaire
    Par Chatbour dans le forum Vos contributions VB6
    Réponses: 3
    Dernier message: 25/10/2010, 17h40
  3. Réponses: 9
    Dernier message: 10/01/2008, 16h44
  4. Gestion d'une bibliothèque en Windev
    Par Lenalyon dans le forum WinDev
    Réponses: 5
    Dernier message: 23/08/2007, 15h01
  5. Réponses: 4
    Dernier message: 30/03/2007, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo