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 :

Count et 0 [Débutant(e)]


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut Count et 0
    Bonjour à tous

    Je débute dans le SQL, et dans le cadre de mes études je dois réaliser une bdd de championnat de football sous access.

    Je tente d'écrire une requête qui affiche le score d'un match, en utilisant un COUNT sur ma table MARQUE (ID_match, ID_joueur, minute, spé( sp : sur pénaltie ou csc : contre son camp)

    Mais mon problème c'est que le COUNT n'affiche pas les 0, donc quand je veux afficher : Equipe1 : 1
    Equipe2 : 0

    j'obtiens : Equipe1 : 1 et c'est pas top comme résultat

    Comment puis-je faire pour que mon COUNT m'affiche mes 0 ?

    Voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DOMICILE_OU_EXTERIEUR, NOM_CLUB, COUNT(MARQUE.NUMÉRO_LICENCE) AS BUT
    FROM CLUB, JOUER, JOUEUR, MARQUE, [MATCH]
    WHERE MARQUE.ID_MATCH=[ENTREZ UN ID_MATCH] And JOUER.ID_CLUB=CLUB.ID_CLUB And JOUER.ID_MATCH=MATCH.ID_MATCH And MARQUE.ID_MATCH=MATCH.ID_MATCH And JOUEUR.NUMÉRO_LICENCE=MARQUE.NUMÉRO_LICENCE And JOUEUR.ID_CLUB=CLUB.ID_CLUB
    GROUP BY DOMICILE_OU_EXTERIEUR, NOM_CLUB;
    Merci beaucoup par avance

    Et si quelqu'un à une solution pour compter les but csc pour l'autre équipe je suis aussi preneur

  2. #2
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Est-ce que tu as une table de référence des clubs, c'est à dire une table ou NOM_CLUB est la clef primaire ?
    Dans ce cas, tu peux faire une jointure externe entre cette table, et la table des buts (je simplifie la requête pour l'exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT NOM_CLUB, COUNT(BUTS)
    FROM CLUBS a LEFT JOIN BUTS b
       ON a.NOM_CLUB = b.NOM_CLUB
    GROUP BY NOM_CLUB
    => la jointure externe te renvoie un enregistrement de "CLUBS" même si aucun enregistrement "BUTS" ne correspond à ce club...

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    Salut

    Merci pour ta réponse

    Mais je n'ai aucune table avec NOM_CLUB comme clé primaire, dans ma table club j'utilise un id_club, ensuite j'ai une table jouer dont la clé primaire est #id_club#id_match, une table match identifiée par id_match, une table participer par #idjoueur#idmatch, une table MARQUE par #idjoueur#idmatch, minutebut.. les autres tables sont sans importances pour ce problème je pense.

    J'ai déjà lu sur le forum la solution de la jointure, mais je n'arrive pas à l'appliquer sur cet exemple, à l'intégrer au milieu de tout le reste

    Merci d'avance aux prochains qui posteront

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Ah, excuse moi, j'avais pas vu la table CLUB. C'est en fait à ça que je pensais en parlant de la table NOM_CLUB : l'important, c'est d'avoir une table de référence pour les clubs.

    S'il faut faire une jointure externe, tu es obligé d'utiliser les JOIN, au lieu de faire le lien dans le WHERE.

    Allez, juste un petit exemple avec ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM MARQUE JOIN [MATCH] 
    ON MARQUE.ID_MATCH = [ENTREZ UN ID_MATCH]
    remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM MARQUE, [MATCH] 
    WHERE MARQUE.ID_MATCH = [ENTREZ UN ID_MATCH]
    Sur 3 tables, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *
    FROM (MARQUE JOIN [MATCH] ON MARQUE.ID_MATCH = [ENTREZ UN ID_MATCH]) JOIN JOUER ON JOUER.ID_MATCH = MATCH.ID_MATCH
    ...

    Commencer par réécrire ta requête de cette manière. Si tu as du mal, fais le étape par étape, et exécute à chaque fois pour vérifier que ça marche (comme dans l'exemple : avec 2 tables, puis 3, ...)

    Une fois que tu auras la jointure complète, tu pourras remplacer la jointure sur CLUB par une jointure externe, histoire d'avoir également les CLUBS n'ayant pas marqué ça te donnera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT ...
    FROM CLUBS LEFT JOIN (Tout_Le_Reste_De_Tes_Jointures) ON JOUER.ID_CLUB=CLUB.ID_CLUB
    Enfin bon, de manière générale, que ce soient des requêtes ou du code, tu arriveras toujours si tu découpes ton boulot, et qu'étape par étape tu vérifies que ton résultat est toujours juste...

  5. #5
    rsc
    rsc est déconnecté
    Membre émérite
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Par défaut
    Ca devrait, si j'ai bien compris la structure de tes tables, être qqch comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DOMICILE_OU_EXTERIEUR, NOM_CLUB, COUNT (*) AS BUT
    FROM CLUB
    LEFT OUTER JOIN JOUER ON JOUER.ID_CLUB = CLUB.ID_CLUB
    LEFT OUTER JOIN MATCH
    ON MATCH.ID_MATCH = JOUER.ID_MATCH
    LEFT OUTER JOIN MARQUE
    ON MARQUE.ID_MATCH = MATCH.ID_MATCH 
    GROUP BY DOMICILE_OU_EXTERIEUR, NOM_CLUB;

  6. #6
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Non, je ne suis d'accord ni avec toi, ni avec moi !

    Si on met des jointures externes partout, les clubs n'ayant pas joué vont également apparaître...

    En fait, il faut partout des INNER JOIN, sauf un OUTER JOIN avec MARQUE.
    (je suis pas sûr, mais je le sens bien comme ça)

  7. #7
    rsc
    rsc est déconnecté
    Membre émérite
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Si on met des jointures externes partout, les clubs n'ayant pas joué vont également apparaître...
    J'ai cru que c'était le but (sans jeu de mots ) :
    Citation Envoyé par melouze
    Comment puis-je faire pour que mon COUNT m'affiche mes 0 ?
    Si on veut n'avoir que les clubs ayant joué, on prend MATCH comme table principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DOMICILE_OU_EXTERIEUR, NOM_CLUB, COUNT (*) AS BUT
    FROM MATCH
    INNER JOIN JOUER ON JOUER.ID_MATCH = MATCH.ID_MATCH
    INNER JOIN CLUB ON CLUB.ID_CLUB = JOUER.ID_CLUB
    LEFT OUTER JOIN MARQUE
    ON MARQUE.ID_MATCH = MATCH.ID_MATCH 
    GROUP BY DOMICILE_OU_EXTERIEUR, NOM_CLUB;

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

Discussions similaires

  1. UNION et COUNT(*)
    Par Goldust dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/08/2003, 09h30
  2. limiter le résultat retourné par le count
    Par SuperFoustan dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/08/2003, 12h10
  3. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02
  4. Multiple Count
    Par Antichoc dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2003, 11h19
  5. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41

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