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 :

Requete pour compter les points dans un championnat


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Requete pour compter les points dans un championnat
    Bonjour à tous!
    Donc voila j'ai créer une base de donnée sous access comme suit:
    table:
    EQUIPE avec comme clé primaire "equipe".(seul champ)
    JOURNEE avec comme clé primaire "journee".(seul champ)
    RENCONTRE avec comme clé primaire et étrangère "equipe" de EQUIPE, "equipe2" de EQUIPE(association réflexive), "journee" de JOURNEE et comme champ "butsmarquéséquipe1"(nombre de buts marqué par "equipe") et "butsmarquéséquipe2"(nombre de buts marqués par "équipe2")

    Donc la traduction serait: une équipe rencontre une autre équipe à une certaine journée.

    A partir de cela, je souhaiterait réaliser une requete me permettant d'avoir le nombre de points par équipe sachant:
    1match gagné = 3 points
    1match perdu = 1 points

    J'ai tout d'abord réalisé une requete me permettant davoir le nombre de points pour une équipe:
    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 equipe, 
           (SELECT count(equipe)*3 
              FROM rencontre 
             WHERE butsmarquéséquipe1 > butsmarquéséquipe2 And equipe='om')  
             + 
           (SELECT count(equipe)*3 
              FROM rencontre 
             WHERE butsmarquéséquipe2 > butsmarquéséquipe1 And equipe2='om')
             + 
           (SELECT count(equipe)*1
              FROM rencontre 
             WHERE butsmarquéséquipe1 = butsmarquéséquipe2 And 
                   (equipe = 'om' or  equipe2 = 'om'))
      FROM rencontre
      WHERE equipe='om'
    GROUP BY equipe;
    Cette requete fonctionne mais lorsque j'essaye de faire une requete pour afficher toutes les équipes avec leurs points je n'y arrive pas!
    On m'a dit alors qu'il fallait peut-etre utiliser un "LEFT JOIN" et on est arriver a cette requete(les matchs nuls ne sont pas traités, c'est juste une ébauche):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT E.equipe, COUNT(A.equipe)*3
      FROM equipe E LEFT JOIN (SELECT equipe2 FROM rencontre 
                                WHERE butsmarquéséquipe1 < butsmarquéséquipe2) B
                    ON E.equipe = B.equipe2             
                    LEFT JOIN (SELECT equipe FROM rencontre 
                                WHERE butsmarquéséquipe1 > butsmarquéséquipe2) A 
                    ON E.equipe = A.equipe GROUP BY E.equipe;
    Cette requete ne fonctionne pas, cela affiche: "erreur de sybtaxe opérateur absent dans: E.equipe = B.equipe2 LEFT JOIN (SELECT equipe FROM rencontre WHERE butsmarquéséquipe1 > butsmarquéséquipe2) A ON E.equipe = A.equipe GROUP BY E.equipe;"
    On a chercher mais malheureusement pas trouver!

    Donc voila j'aimerai savoir s'il faut bien utiliser un LEFT JOIN et si vous n'auriez pas une requete a me proposer pour résoudre ce probleme!!
    Merci d'avance!

    je souhaite afficher une modification a mon message
    un match nul = 1 point
    match perdu = 0 bien entendu
    voila dsl.
    merci

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : janvier 2005
    Messages : 2 701
    Points : 4 237
    Points
    4 237
    Par défaut
    Merci de penser à la balise code

    Concernant la définition de tes tables, c'est dommage de reprendre des noms similaires pour des champs clé, des champs clés étrangères et des tables

    En reprenant ta première requête :

    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
    17
    SELECT equipe, 
           (SELECT count(*)*3 
              FROM rencontre RG1
             WHERE RG.equipe = E.equipe
               AND butsmarquéséquipe1 > butsmarquéséquipe2)
             + 
           (SELECT count(*)*3 
              FROM rencontre RG2
             WHERE RG2.equipe2 = E.equipe
               AND butsmarquéséquipe2 > butsmarquéséquipe1)
             + 
           (SELECT count(*)*1
              FROM rencontre RN
             WHERE butsmarquéséquipe1 = butsmarquéséquipe2
               AND E.equipe = RN.equipe OR E.equipe = RN.equipe2)
      FROM Equipe E
    ORDER BY equipe;
    les alias étant RG pour Rencontre Gagnée et RN pour Rencontre Nul

    Il est tard et je n'ai pas pris le temps de tester, donc si il y a le moindre souci :
    - précise-nous ton SGBD ( CONSEILS... à lire AVANT de POSTER)
    - décris-nous ton erreur en détail
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci Xo SA MARCHE!!!!
    J'ai juste changer dans ta requête ton ORDER BY par un GROUP BY et j'ai aussi mit des parenthèses pour séparer le AND du OR :
    AND (E.equipe = RN.equipe OR E.equipe = RN.equipe2))
    et cela fonctionne!
    Dire que j'ai passé du temps dessus et que je suis passé tout pres de la reponse plusieurs fois!
    Jte remercie!

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : janvier 2005
    Messages : 2 701
    Points : 4 237
    Points
    4 237
    Par défaut
    Citation Envoyé par IG2da
    J'ai juste changer dans ta requête ton ORDER BY par un GROUP BY
    Le GROUP BY ne sert à rien dans ta requête
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 30/01/2012, 19h41
  2. Réponses: 1
    Dernier message: 10/02/2010, 15h08
  3. Requête pour Oter les points dans les Num de tel
    Par isabelle b dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/07/2008, 02h27
  4. Réponses: 3
    Dernier message: 15/03/2007, 21h33
  5. requete pour compter les valeurs ds une colonne
    Par smariteau dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/02/2006, 18h37

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