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

Langage SQL Discussion :

Multiple count suivant la valeur d'un champ


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Multiple count suivant la valeur d'un champ
    Bonsoir à tous,

    Je vous remercie d'avance pour votre aide, je vais essayer de faire le message le plus précis possible. Je n'ai pas vu de demande similaire sur internet, désolé si plusieurs topics en parlent déjà.


    Je vous donne le contexte: je souhaite afficher un tableau qui donne le nombre de match par joueur par groupe auquel il a joué. (il n'y a actuellement que 4 groupes)

    je voudrais par exemple voir:
    nom | match en 1 | match en 2 | match en 3 | match en 4
    toto 3 2 0 1


    J'ai 3 tables (si je me souviens bien, c'est souligné pour clé primaire, je mets la clé étrangère en italique):
    dJoueur (idJoueur, nom, prenom)
    dMatch (idMatch) // c'est pour distinguer les journées de championnats, ca pourra me servir plus tard)
    dGdm (idGdm, idJoueur, idMatch, groupe)


    J'ai essayé par 2 manières différentes:

    1 j'ai testé par requête imbriqué, mais je suis bloqué sur le cas simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
        nom as p
    FROM 
        dJoueur u
            Inner JOIN (
                SELECT COUNT(dGdm.idJoueur)             AS nbMatch 
                FROM dGdm 
                GROUP BY dGdm.idJoueur
            ) tor 
                ON u.idJoueur = tor.idJoueur
    J'ai comme erreur: MySQL a répondu : Documentation
    #1054 - Champ 'tor.idJoueur' inconnu dans on clause

    J'ai essayé de mettre des tor au lieu des dGdm de partout, puis mettre des dGdm de partout, à chaque fois je bloque je ne comprends pas pourquoi.


    j'ai donc essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT j.nom, COUNT(g.groupe) AS nbM1, COUNT(g.groupe) AS nbM2, COUNT(g.groupe) AS nbM3, COUNT(g.groupe) AS nbM4
    FROM  `dJoueur` j,  dGdm g, dMatch m
    WHERE j.idJoueur = g.idJoueur
      AND g.idMatch = m.idMatch
     
      GROUP BY j.idJoueur, g.groupe
      having g.groupe =1
      having g.groupe =2
      having g.groupe =3
      having g.groupe =4
    Ca ne marche pas. Sans le Having je sens que je suis proche de la solutions, j'ai 4 fois la même colonne mais plusieurs lignes.

    J'ai la sensation qu'il faille que je fasse une requête imbriqué, mais même en lisant des articles un peu similaire je n'arrive pas à adapter à ma situation.

    J'espère ne pas faire une erreur stupide, et je vous remercie encore de votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Bonjour,
    En principe la "mis en colonne" est du ressort de l'application. Néanmoins c'est possible ici, si le nombre de match est figé.
    Je procèderai en deux étapes:
    1. Comptage des matchs par joueur
    2. Mise en colonne

    Pour la première, c'est simple:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select j.idjoueur,m.idmatch,count(*)
    from djoueur as j
    inner join dgdm as m on j.idmatch=m.idmatch
    group by j.idjoueur,m.idmatch
    Ensuit pour le point 2, la requête ressemble à ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select idjoueur,sum(case when idmatch = 1 then 1 else 0 end),sum(case when idmatch = 2 then  1 else 0 end),...
    from
    avec en guide de table la requête précédente.
    Suivant le SGBD, il est possible de remplacer la sous-requête par une CTE.

    Tatayo.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour Tatayo,

    J'aurai du préciser que je n'ai pas un très bon niveau en sql, et que la moitié de ce que j'ai déja tapé c'est en partant d'exemple sur le net qui font des choses similaire aux miennes.

    Je ne connais pas le concept de CTE, j'ai cependant trouvé cela:
    https://technet.microsoft.com/fr-fr/...=sql.105).aspx

    J'ai compris ta première partie de ta requête, j'ai mis à jour la casse. Mais comme je veux savoir le nombre de match par groupe, je ne vois pas trop ou cette requête veut en venir.

    je n'ai pas trop compris le principe de CTE. Je vais chercher plus attentivement.

    Pour le nombre de match, il n’excèdera pas 22. Mais ils vont augmenter au fur et à mesure. A savoir (cas rare mais plausible), un joueur peut jouer 2 fois la même journée avec 2 équipes différentes.

    Je suis sur MySQL et phpMyAdmin, c'est pour un résultat que j'affiche sur mon site internet : johank.fr/dfc


    Désolé d'être un peu lent à la détente et merci de ton aide!

Discussions similaires

  1. Style suivant la valeur d'un champ
    Par DanaX dans le forum iReport
    Réponses: 10
    Dernier message: 17/08/2010, 19h04
  2. sautde page suivant la valeur d'un champ
    Par jamesleouf dans le forum iReport
    Réponses: 0
    Dernier message: 23/04/2009, 14h59
  3. Réponses: 1
    Dernier message: 12/12/2008, 09h14
  4. Réponses: 2
    Dernier message: 07/05/2008, 12h08
  5. Réponses: 11
    Dernier message: 30/03/2007, 10h30

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