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 :

[SQL] requête statistique


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut [SQL] requête statistique
    Bonjour,

    J'ai fait une application qui permet de gérer les inscriptions à un rallye et cette application doit pouvoir imprimer des statistiques à la fin des inscriptions.

    Je dois imprimer un tableau qui contient le nombre d'homme et de femme inscrit à chaque parcours. Voici ma requête qui ne fonctionne pas à cause de ml'égalité dans les counts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IBQuery2->SQL->Add("SELECT TYPE_PARCOURS.S_LIB_TYPE_PARCOURS, PARCOURS.S_LIB_PARCOURS, COUNT(SEXE.S_LIB_SEXE=" + RadioGroup4->Items->Strings[0] + ") NbH, COUNT(SEXE.S_LIB_SEXE=" + RadioGroup4->Items->Strings[1] + ") NbF"
                       " FROM TYPE_PARCOURS, PARCOURS, PARTICIPANT, SEXE"
                       " WHERE TYPE_PARCOURS.I_ID_TYPE_PARCOURS=PARCOURS.I_ID_TYPE_PARCOURS AND PARTICIPANT.I_ID_PARCOURS=PARCOURS.I_ID_PARCOURS AND PARTICIPANT.I_ID_SEXE=SEXE.I_ID_SEXE");
    Comment puis-je faire pour indiquer dans la requête que NbF est le nombre de femme sur le parcours et NbH le nombre d'homme.

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Points : 304
    Points
    304
    Par défaut
    En utilisant le GROUP BY
    Ce qui devrait donner quelque chose comme : (Attention, je n'ai pas testé, c'est le principe que j'énonce ici)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT TYPE_PARCOURS.S_LIB_TYPE_PARCOURS, PARCOURS.S_LIB_PARCOURS, SEXE.S_LIB_SEXE, COUNT(*) nbr
    FROM TYPE_PARCOURS, PARCOURS, PARTICIPANT, SEXE
    WHERE TYPE_PARCOURS.I_ID_TYPE_PARCOURS=PARCOURS.I_ID_TYPE_PARCOURS
     AND PARTICIPANT.I_ID_PARCOURS=PARCOURS.I_ID_PARCOURS AND 
    PARTICIPANT.I_ID_SEXE=SEXE.I_ID_SEXE
    GROUP BY 1, 2, 3
    ORDER BY 1, 2, 3

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    Merci, cela m'a permis d'avancer mais je bloque toujours.
    J'ai maintenant le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TYPE_PARCOURS.S_LIB_TYPE_PARCOURS, PARCOURS.S_LIB_PARCOURS, COUNT(SEXE.S_LIB_SEXE) NbH, COUNT(SEXE.S_LIB_SEXE) NbF
    FROM TYPE_PARCOURS, PARCOURS, PARTICIPANT, SEXE
    WHERE TYPE_PARCOURS.I_ID_TYPE_PARCOURS=PARCOURS.I_ID_TYPE_PARCOURS
     AND PARTICIPANT.I_ID_PARCOURS=PARCOURS.I_ID_PARCOURS AND 
    PARTICIPANT.I_ID_SEXE=SEXE.I_ID_SEXE
    GROUP BY TYPE_PARCOURS.S_LIB_TYPE_PARCOURS, PARCOURS.S_LIB_PARCOURS
    et le problème, c'est qu'il compte tout (homme + femme). Pour pouvoir l'imprimer, il me faut une seule ligne pour les 2 valeurs. C'est à dire que je ne peut pas faire un GROUP BY avec un SEXE.I_ID_SEXE car sinon, j'obtiens une ligne pour les homme et une autre pour les femmes. Il me faut ces 2 infos sur la même ligne mais dans 2 colonnes.

    J'en viens donc toujours au coeur du problème, je ne sais pas comment faire pour lui dire de ne compter que le nombre d'homme ou que le nombre de femme.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Points : 304
    Points
    304
    Par défaut
    Il faut faire un "OUTER JOIN" (une recheche sur google ou ici même te donnera toutes les explications que je n'ai pas le temps de te donner ici)

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    Merci, j'ai trouver comment faire avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    IBQuery2->SQL->Add("SELECT (SELECT COUNT(SEXE.S_LIB_SEXE) FROM TYPE_PARCOURS, PARCOURS, PARTICIPANT, SEXE WHERE TYPE_PARCOURS.I_ID_TYPE_PARCOURS=PARCOURS.I_ID_TYPE_PARCOURS"
                       " AND PARTICIPANT.I_ID_PARCOURS=PARCOURS.I_ID_PARCOURS AND"
                       " PARTICIPANT.I_ID_SEXE=SEXE.I_ID_SEXE AND SEXE.S_LIB_SEXE='Masculin') AS NbH, (SELECT COUNT(SEXE.S_LIB_SEXE) FROM TYPE_PARCOURS, PARCOURS, PARTICIPANT, SEXE WHERE TYPE_PARCOURS.I_ID_TYPE_PARCOURS=PARCOURS.I_ID_TYPE_PARCOURS"
                       " AND PARTICIPANT.I_ID_PARCOURS=PARCOURS.I_ID_PARCOURS AND"
                       " PARTICIPANT.I_ID_SEXE=SEXE.I_ID_SEXE AND SEXE.S_LIB_SEXE='Féminin') AS NbF, TYPE_PARCOURS.S_LIB_TYPE_PARCOURS, PARCOURS.S_LIB_PARCOURS"
                       " FROM TYPE_PARCOURS, PARCOURS, PARTICIPANT, SEXE"
                       " WHERE TYPE_PARCOURS.I_ID_TYPE_PARCOURS=PARCOURS.I_ID_TYPE_PARCOURS"
                       " AND PARTICIPANT.I_ID_PARCOURS=PARCOURS.I_ID_PARCOURS AND"
                       " PARTICIPANT.I_ID_SEXE=SEXE.I_ID_SEXE"
                       " GROUP BY TYPE_PARCOURS.S_LIB_TYPE_PARCOURS, PARCOURS.S_LIB_PARCOURS");
    C'est pas mis en forme mais ça marche.

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

Discussions similaires

  1. [Requête]/SQL]Compiler statistiques d'un magasin
    Par hautcoeurch dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/04/2007, 03h34
  2. Réponses: 2
    Dernier message: 06/06/2005, 16h13
  3. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/2005, 15h12
  4. [PL/SQL]requête imbriquée
    Par Nadine dans le forum Oracle
    Réponses: 6
    Dernier message: 01/02/2005, 17h21
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 17h10

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