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 :

[requete] Probleme de COUNT() et GROUP BY


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut [requete] Probleme de COUNT() et GROUP BY
    Bonjour à tous,

    J'ai vraiment des problemes sur les COUNT et les GROUP BY....

    En gros j'ai une table qui répertorie des points marqués et qui se décline ainsi :

    Table GOALS
    id int(11) => Identifiant du point marqué
    id_match int(11) => Identifiant du match ou le but a été marqué
    id_person int(11) => Identifiant de la personne qui a marqué
    id_club int(11) => Identifiant de l'équipe qui a marqué
    goal_min tinyint(3) => Minute ou le but a été marqué

    Le but de ma requete est de sortir le nombre de points marqués par 1/4 d'heures avec une ligne par clubs

    Donc je suis parti sagement au début sur les buts marqués dans le premier et le second 1/4 d'heures mais invariablement il me donne le meme total....
    Quelqu'un aurait-il une idée ?

    Voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT Q1.id_club, count( Q1.id_club ) AS Q1goals, count( Q2.id_club ) AS Q2goals, count( Q3.id_club ) AS Q3goals
    FROM goals AS Q1
    JOIN goals AS Q2 ON ( Q2.goal_min <15
    AND Q2.goal_min >30 )
    JOIN goals AS Q3 ON ( Q3.goal_min <30
    AND Q3.goal_min >45 )
    WHERE Q1.goal_min <15
    AND Q1.id_club = Q2.id_club = Q3.id_club
    GROUP BY Q1.id_club
    LIMIT 2
    Merci d'avance a ceux qui voudront bien me donner un petit coup de main...

    @+
    cadou

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Par défaut
    Bonjour,

    Le but de ma requete est de sortir le nombre de points marqués par 1/4 d'heures avec une ligne par clubs
    nombre de points = nombre de buts ?

    Pourquoi toutes ces jointures ?

    si j'ai bien compris, etant donne qu'une ligne correspond a un but, la requete suivante devrait te donner le resultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id_club, count(*) FROM goals WHERE goal_min<15 group by id_club

  3. #3
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Les buts sont marqués a la X ième minutes...
    J'enregistre un but par ligne, ce qui me permet pour chaque but de savoir a quel minute il a été marqué.... et par qui...

    Maintenant, et pour une équipe donnée, je voudrais savoir combien de buts sont marqués par 1/4 d'heures....

    Donc si je reprends la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT id_club, count(*) FROM goals WHERE goal_min<15 GROUP BY id_club
    J'ai les buts marqués dans le premier 1/4 d'heure pour toutes les équipes, or ce que je cherche c'est avoir le nombre de buts tous les 1/4 d'heures pour chaque équipe et ce dans une seule requete afin de ne pas avoir à la répété 6 fois de suite....

    En Gros il faudrait que le résultat de la requete donne quelquechose comme :

    : id : Q1 : Q2 : Q3 : Q4 : Q5 : Q6
    : 1 : 2 : 5 : 4 : 3 : 2 : 1
    : 2 : 4 : 1 : 3 : 1 : 4 : 2
    : 3 : 3 : 2 : 4 : 2 : 2 : 5

    Ce qui me permet de dire que dans le 3eme 1/4 d'heure (entre la 30eme et la 45eme) l'équipe 3 a marqué 4 buts
    D'ou mes jointures a n'en plus finir....

    Merci d'avance
    @+
    cadou

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Q1.id_club, count( Q1.id_club ) AS Q1goals, count( Q2.id_club ) AS Q2goals, count( Q3.id_club ) AS Q3goals
    FROM goals AS Q1
      JOIN goals AS Q2 ON ( Q2.goal_min <15
        AND Q2.goal_min >30 )
      JOIN goals AS Q3 ON ( Q3.goal_min <30
        AND Q3.goal_min >45 )
    WHERE Q1.goal_min <15
    AND Q1.id_club = Q2.id_club = Q3.id_club
    GROUP BY Q1.id_club
    LIMIT 2
    Il doit y avoir un problème au niveau des jointures.
    1. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      JOIN goals AS Q2 ON Q2.goal_min <15 AND Q2.goal_min >30
      tu joins les goals marqués à la fois avant la 15ème minute et après la 30ème minute.
      Cette jointure ne donne aucun résultat puisqu'un nombre ne peut pas être à l a fois inférieur à 15 et supérieur à 30

    2. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      JOIN goals AS Q3 ON Q3.goal_min <30 AND Q3.goal_min >45
      même problème


    Ta table est :
    • goals ( id, id_match, id_person, id_club, goal_min )


    Pour résoudre ton problème, je te conseilles de procéder par étapes :
    1. obtenir la liste des équipes
    2. joindre le nombre de buts marqués dans le 1er 1/4 d'heure
    3. joindre le nombre de buts marqués dans le 2ème 1/4 d'heure
    4. joindre le nombre de buts marqués dans le 3ème 1/4 d'heure
    5. joindre le nombre de buts marqués dans le 4ème 1/4 d'heure
    6. joindre le nombre de buts marqués dans le 5ème 1/4 d'heure
    7. joindre le nombre de buts marqués dans le 6ème 1/4 d'heure


    1. obtenir la liste des équipes
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      SELECT id_club, id_match
      FROM goals
      GROUP BY id_club, id_match
    2. joindre le nombre de buts marqués dans le 1er 1/4 d'heure
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      SELECT E.id_club, E.id_match,
        count(Q1.id) as Q1goals
      FROM goals as E
        LEFT JOIN goals as Q1 ON Q1.id_club=E.id_club AND Q1.id_match=E.id_match
          AND Q1.goal_min<15
      GROUP BY E.id_club, E.id_match

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Par défaut
    je ne vois pas de moyen de faire ce que tu demandes. C'est peut-etre possible, mais il faut garder en tete que le SQL n'est pas fait pour presenter les donnees, voir ceci: http://sql.developpez.com/sqlaz/erreurs/#L9

    Le resultat cherche n'est pas complique a obtenir, par contre SQL "seul" ne permet pas (facilement au minimum) de le faire.

    EDIT: je n'avais pas vu le post de jeremya. Peut-etre la solution 100% SQL alors.

  6. #6
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Bonjour,

    Et avant tout merci a ceux qui se penchent sur mon probleme.

    J'ai testé la requete de jeremya, en adaptant un peu car il me semble qu'il me proposait les buts par clubs et par matchs et je les veux simplement par clubs.

    En gros je cherche a avoir tous matchs confondus le nombre de buts marqués par 1/4 d'heure pour chaque équipe.

    J'ai testé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT T.id_club, count( Q1.id ) AS Q1goals, count( Q2.id ) AS Q2goals, count( Q3.id ) AS Q3goals
    FROM goals AS T
    JOIN goals AS Q1 ON Q1.goal_min <15 AND Q1.id_club = T.id_club
    JOIN goals AS Q2 ON (Q2.goal_min >15 AND Q2.goal_min <30) AND Q2.id_club = T.id_club
    JOIN goals AS Q3 ON (Q3.goal_min >30 AND Q3.goal_min <45) AND Q3.id_club = T.id_club
    GROUP BY T.id_club
    Cela me sort bien une ligne par équipe, mais j'ai le meme total dans chaque colonne et je ne comprends vraiment pas pourquoi...

    Si quelqu'un avais une idée cela m'aiderait beaucoup

    Merci d'avance
    @+
    cadou

  7. #7
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    Apres watt milles essais j'ai enfin trouvé ma réponse et je remercie jeremya qui m'a bien mis sur la voie...
    La requete est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SELECT E.id_club, 
    count(DISTINCT Q1.id) AS G1, 
    count(DISTINCT Q2.id) AS G2, 
    count(DISTINCT Q3.id) AS G3, 
    count(DISTINCT Q4.id) AS G4, 
    count(DISTINCT Q5.id) AS G5, 
    count(DISTINCT Q6.id) AS G6
    FROM goals AS E 
    LEFT JOIN goals AS Q1 ON Q1.id_club=E.id_club AND Q1.id_match=E.id_match AND Q1.goal_min<=15 
    LEFT JOIN goals AS Q2 ON Q2.id_club=E.id_club AND Q2.id_match=E.id_match AND Q2.goal_min > 15 AND Q2.goal_min<=30 
    LEFT JOIN goals AS Q3 ON Q3.id_club=E.id_club AND Q3.id_match=E.id_match AND Q3.goal_min > 30 AND Q3.goal_min<=45 
    LEFT JOIN goals AS Q4 ON Q4.id_club=E.id_club AND Q4.id_match=E.id_match AND Q4.goal_min > 45 AND Q4.goal_min<=60 
    LEFT JOIN goals AS Q5 ON Q5.id_club=E.id_club AND Q5.id_match=E.id_match AND Q5.goal_min > 60 AND Q5.goal_min<=75 
    LEFT JOIN goals AS Q6 ON Q6.id_club=E.id_club AND Q6.id_match=E.id_match AND Q6.goal_min > 75 AND Q6.goal_min<=90 
    GROUP BY E.id_club
    Le secret était donc dans le DISTINCT

    @+
    cadou

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requete select avec count et group by
    Par paco503 dans le forum Requêtes
    Réponses: 7
    Dernier message: 06/05/2013, 17h42
  2. Requetes 2 tables, count, as,group by
    Par nezhaaem dans le forum C++Builder
    Réponses: 13
    Dernier message: 07/08/2010, 15h22
  3. [Access] Probleme de count dans une requete sql
    Par castelligreg dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/04/2006, 16h20
  4. [sql]Probleme de count dans une requete sql (sous access)
    Par castelligreg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/04/2006, 16h06
  5. Probleme d'execution d'une requete avec un Count
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 23/06/2004, 10h33

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