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 :

Pb de COUNT et GROUP BY simple mais sans requête imbriquées


Sujet :

Langage SQL

  1. #1
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    606
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 606
    Points : 2 064
    Points
    2 064
    Par défaut Pb de COUNT et GROUP BY simple mais sans requête imbriquées
    Bonjour,

    J'ai un problème de comptage qui devrait être simple, mais je n'arrive à résoudre en une seule requête.

    Mes structures seraient trop longues à expliquer alors je vais décrire un cas d'école :

    J'ai des dossiers (avec un code_dossier), des élements (avec un code_element)

    Chaque dossier peut contenir N éléments, éventuellement plusiuers fois le même. J'ai donc une table de correspondance du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    id   code_dossier      code_element      donnees_de_cette_instance
    --   ---------------      ----------------      -------------------------------
    1    1000                  10                       'aaa'
    2    1000                  11                       'bbb'
    3    1000                  10                       '2nd occurence 1000/10'
    4    1000                  10                       '3ème occurence 1000/10'
    5    1010                  10                       'ddd'
    6    1010                  11                       'eee'
    7    1020                  10                       'fff'
    8    1030                  11                       'ggg'
    Ce que je veux savoir c'est combien de dossier font référence à l'élément 10.

    Dans l'exemple ci-dessus, le résultat attendu serais une unique ligne contenant une unique valeur : 3.

    (Puisque les dossiers 1000, 1010 et 1020 sont les 3 dossiers distinct faisant référenceà l'elt 10 - même si 1000 fait 3 fois référence à l'elt 10)

    J'ai fait plein d'essais, mais soit j'ai un résultat faux, soit j'ai une suite d'enregistrements (et non pas une valeur unique).

    J'utilise MySQL 4.0, je n'ai donc pas droit aux requêtes imbriquées.
    J'ignore si mon pb viens de là, où de mon incapacité à bien utiliser count, group by, having ...

    Merci d'avance.
    --
    vanquish

  2. #2
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Si ok pour requête imbriquée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select select code_element,count(*)
    from (select distinct code_dossier,code_element from table)
    group by code_element
    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select distinct code_dossier,code_element
    into #tempo
    from table
     
    select code_element,count(*)
    from #tempo
    group by code_element
    Et enfin, ya ca que j'ai jamais essayé et dont je ne suis pas sur du tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select code_element,count(distinct code_dossier)
    from table
    group by code_element
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  3. #3
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Dans ton cas précis tu peux faire de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT count(distinct code_dossier) 
    FROM table 
    WHERE code_element='10';

  4. #4
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    606
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 606
    Points : 2 064
    Points
    2 064
    Par défaut
    Bonjour

    le count( distinct xxx) fontionne très bien.
    Je ne connaissais pas cette forme.

    Merci à tous deux.
    --
    vanquish

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

Discussions similaires

  1. [AC-2007] Requête d'apparence hyper simple mais sans solution
    Par elsergio dans le forum Requêtes et SQL.
    Réponses: 19
    Dernier message: 28/05/2011, 11h29
  2. Programme tout simple mais sans fenetre
    Par pip1000 dans le forum Débuter
    Réponses: 6
    Dernier message: 10/02/2009, 20h02
  3. Probleme simple, mais grave!
    Par vienin dans le forum C++
    Réponses: 15
    Dernier message: 09/12/2005, 01h05
  4. Réponses: 6
    Dernier message: 27/04/2005, 15h46
  5. requete a 1er vue simple mais a 2em vue... :(
    Par exyacc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/03/2005, 09h05

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