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 :

Comptage impossible ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut Comptage impossible ?
    Bonsoir,

    Voici mon pb :

    J'ai deux tables :
    "COMPETENCE", qui contient IDCOMPETENCE

    "COMPETENCE_EXERCICE" qui contient IDCOMPETENCE et IDEXERCICE

    Ma demande de requête est simple. Je veux lister toutes les compétences de "COMPETENCE", et compter combien de fois elles ont IDEXERCICE = 1 d'associé dans la table COMPETENCE_EXERCICE.
    En gros, compter le nombre d'exercice 1 pour chaque compétence....

    Le left join me donne le nombre d'exo total par compétence. Mais je veux compter que les exos avec IDEXERCICE = 1 et pas les autres....


    Vous avez une idée ?
    Mon début de requête :
    SELECT C.IDCOMPETENCE, count(C_EX.IDEXERCICE) AS SOMME
    FROM COMPETENCE C
    LEFT JOIN COMPETENCE_EXERCICE C_EX
    ON C_EX.IDCOMPETENCE = C.IDCOMPETENCE
    GROUP BY IDCOMPETENCE


    Y a juste le filtre sur l'IDEXERCICE à compter que j'arrive pas à placer... Merci pour votre aide. Elle me sera très précieuse :-)

  2. #2
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Pourquoi ne ferais-tu pas une jointure naturelle :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT C.IDCOMPETENCE, count(C_EX.IDEXERCICE) AS SOMME
    FROM COMPETENCE C, COMPETENCE_EXERCICE C_EX
    where C_EX.IDCOMPETENCE = C.IDCOMPETENCE
    GROUP BY C.IDCOMPETENCE
    having C_EX.IDEXERCICE=1;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut
    Le problème de ce que tu me proposes, c'est que ça ne liste pas les compétences qui n'apparaissent pas dans la table "COMPETENCE_EXERCICE". Ta jointure ne va me lister que les compétences qui ont l'exo 1.

    J'ai besoin d'avoir toute la liste des compétences, et d'un coup, de voir celles qui ont l'exo 1 (avec un count >=1) et celles qui ne l'ont pas....

    Une autre solution ? Je tiens à éviter la double requête (pour des raisons de performance évidentes) dans le code qui va afficher le résultat dans mon programme....

    Sinon, que me proposez-vous comme autre requête (sans count peut-être) qui, pour chaque compétence, pourrait m'indiquer celle qui ont l'exo et celle qui ne l'ont pas.
    Mais je dois impérativement avoir la liste intégrale des compétences contenues dans la table "COMPETENCE". En gros, autant de ligne dans mon résultat que dans la table "COMPETENCE".....

  4. #4
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Si j'ai bien compris, tu veux lister toute les compétences de la table competence et compter le nombre de fois qu'apparait l'exercice 1 dans la table competence_exercice pour chaque competence dont l'idcompetence est present dans cette table.
    EXP :
    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
    Données :
    Table competence
    idcompetence
    1
    2
    3
    4
    Table competence _exercice
    idcompetence | idexercice
    1            | 1
    1            | 1
    1            | 2
    1            | 1
    4            | 1
    4            | 3
    3            | 2
    3            | 4
    tu voudrais afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Resultat :
    idcompetence | somme
    1            | 3
    2            | 0
    3            | 0
    4            | 1
    Est-ce ce que tu veux ? Sinon envoie un exemple pour clarifier ta requête.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut
    C'est exactement ça !!!!

    Voici ce que j'ai finalement fini par trouver et qui fonctionne :

    SELECT C.IDCOMPETENCE, count(C_EX.IDEXERCICE)
    FROM COMPETENCE C
    LEFT JOIN (SELECT * FROM COMPETENCE_EXERCICE C_EX WHERE C_EX.IDEXERCICE = 1) AS C_EX
    ON C_EX.IDCOMPETENCE = C.IDCOMPETENCE
    GROUP BY C.IDCOMPETENCE

    Et ça fait bien ce que je demande....
    :-)
    Si toutefois, tu as une autre façon de procéder, n'hésite pas. Mais je suis déjà content d'avoir trouvé cette solution qui répond exactement à ma demande....

  6. #6
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Essaie de reprendre ta requête de départ à laquelle tu ajoutes la clause having
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT C.IDCOMPETENCE, count(C_EX.IDEXERCICE) AS SOMME
    FROM COMPETENCE C
    LEFT JOIN COMPETENCE_EXERCICE C_EX
    ON C_EX.IDCOMPETENCE = C.IDCOMPETENCE
    GROUP BY IDCOMPETENCE
    HAVING C_EX.IDEXERCICE=1;

Discussions similaires

  1. [ArchiveBuilder][JavaMail] exécution impossible...
    Par Gorthal dans le forum JBuilder
    Réponses: 7
    Dernier message: 10/01/2003, 10h12
  2. Comptage de mots dans une chaîne
    Par kikinou dans le forum Pascal
    Réponses: 10
    Dernier message: 01/01/2003, 03h27
  3. Réponses: 8
    Dernier message: 20/11/2002, 12h50
  4. Impossible de quitter mon application!
    Par Bouillou dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/11/2002, 21h43
  5. Réponses: 3
    Dernier message: 01/11/2002, 15h30

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