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 :

Requête group by + max(count())


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Requête group by + max(count())
    Bonjour tout le monde,

    J'ai un petit probleme pour écrire une requete SQL. Pour faire simple, j'ai une table T1 qui ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    chiffre | lettre
    ----------------
        1        A
        1        B
        2        A
        3        A
        1        A
        2        C
        2        C
        3        B
        3        B
    Je souhaiterais créer une requete qui permet de definir pour un chiffre qu'elle est la lettre qui à le plus grand nombre d'occurence, c'est a dire une requete qui puisse me renvoyer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chiffre | lettre
    ----------------
        1        A 
        2        C
        3        B
    (la lettre le plus souvent associé au chiffre 1 est A, la lettre le plus souvent associé au chiffre 2 est C, la lettre le plus souvent associé au chiffre 3 est B)

    Je cale completement, je ne sais meme pas par ou commencer :s

    Merci

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Je vais peut-être dire une bêtise mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT
             Chiffre, MAX(COUNT(Lettre))
     
    FROM
            TaTable
     
    GROUP BY Chiffre;

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Il n'est pas possible d'associer deux fonctions de regroupement dans la même requête.

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Peut-être cela alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    SELECT cnt1.Chiffre, MAX(NbLettre)
     
    FROM
     
    (SELECT
             Chiffre, COUNT(Lettre) AS NbLettre
     
    FROM
            TaTable
     
    GROUP BY Chiffre
                           ) cnt1;

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Un peu lourd mais efficace :
    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
    18
    19
    20
    21
    22
    23
    SELECT  t1.chifrre
        ,   t1.lettre 
    FROM    (   SELECT  chiffre
                    ,   lettre
                    ,   COUNT(*)    AS cnt
                FROM    matable
                GROUP BY chiffre
                    ,   lettre
            )   AS t1 
    WHERE   EXISTS 
            (   SELECT  1 
                FROM    (   SELECT  chiffre
                                ,   lettre
                                ,   COUNT(*)    AS cnt
                            FROM    matable
                            GROUP BY chiffre
                                ,   lettre
                        )   AS t2 
                WHERE   t1.chiffre = t2.chiffre
                GROUP BY t1.chiffre
                HAVING  t1.cnt = MAX(t2.cnt)
            ) 
    ;
    Si deux lettres ont le même poids (maximum) pour un chiffre, les deux lettres seront retournées bien sur

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci bien

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/03/2014, 11h18
  2. Réponses: 1
    Dernier message: 09/07/2013, 16h56
  3. Formulation d'une requête mysql avec max & group by
    Par Didier100 dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/09/2010, 16h37
  4. max(count(*)) avec un GROUP BY (suite)
    Par awalter1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/09/2007, 15h07
  5. max(count(*)) avec un GROUP BY
    Par awalter1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/09/2007, 11h04

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