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


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 17
    Points : 16
    Points
    16
    Par défaut Requête GROUP BY
    Bonjour, je bloque sur une requête group by a priori simple ; J'ai une liste d'élève de plusieurs écoles qui ont soit opté soit pour l'anglais, soit pour l'espagnol.

    Le but est d'avoir par école le nombre d'élèves ayant choisis l'anglais et ceux ayant choisis l'espagnol

    voici ma requête qui ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create table nouvelletable as
    select ecole, count (langue = "anglais") as anglais, count (langue = "espagnol) as espagnol
    group by ecole;
    ma table d'origine :
    ecole   eleve     langue
    ec001   remi      anglais
    ec001   tibo      espagnol
    ec001   pierre    espagnol
    ec002   virginie  anglais
    etc.


    merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Bonjour,
    Je dirai qu'il manque la clause FROM dans la requête, et je ne sais pas si on peut compter des booléens...

    Tatayo.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 152
    Points : 1 414
    Points
    1 414
    Par défaut
    Et pourquoi ne pas utiliser le CASE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ecole,                        
        SUM(CASE WHEN langue = "anglais" THEN 1   
                END) AS Anglais,
        SUM(CASE WHEN langue = "espagnol" THEN 1
                END) AS espagnol, 
    FROM ma_Table
    group by ecole;
    ATTENTION : il est noté des guillemets, ce devrait être normalement des quotes !

  4. #4
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    pouquoi aller loin, c'est simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with ecole as
    (        
    select 'ec001' ecole,  'remi' eleve,     'anglais' langue from dual union
    select 'ec001'  , 'tibo'    ,  'espagnol' from dual union
    select 'ec001' ,  'pierre'   , 'espagnol' from dual union
    select 'ec002',   'virginie' , 'anglais' from dual 
    )
    SELECT ecole,langue,count(eleve) nbre_eleve
     
    FROM ecole
    GROUP BY ecole,langue;

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Citation Envoyé par islamov2000 Voir le message
    pouquoi aller loin, c'est simple
    Parce que cette requête ne répond pas à la demande de jrege75, qui veut pour chaque école le nombre d'élève en anglais et en espagnol sur la même ligne.

    Tatayo.

  6. #6
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    oui, oui ...tu as raison tatayo.

    Juste pour information,on peut aussi utiliser le count.

    La difference entre count et sum,c'est que count retourne un zéro si le resultat est null,par contre sum retourne un vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH ma_table AS
    (        
    SELECT 'ec001' ecole,  'remi' eleve,     'anglais' langue FROM dual union
    SELECT 'ec001'  , 'tibo'    ,  'espagnol' FROM dual union
    SELECT 'ec001' ,  'pierre'   , 'espagnol' FROM dual union
    SELECT 'ec002',   'virginie' , 'anglais' FROM dual 
    )
    SELECT ecole,                        
        count(CASE WHEN langue = 'anglais' THEN 1   
                END) AS Anglais,
        count(CASE WHEN langue = 'espagnol' THEN 1
                END) AS espagnol
    FROM ma_table
    GROUP BY ecole;

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/09/2006, 12h35
  2. [Req] Explication sur requête Group By
    Par benazerty dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 01/09/2006, 17h52
  3. Réponses: 3
    Dernier message: 16/08/2006, 16h05
  4. traiter les groupes retourné par la requête GROUP BY
    Par mgemc2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/08/2006, 13h16
  5. Aide sur une requête (Group By...??)
    Par Cocolapin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2004, 10h26

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