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 :

SELECT Complexe sur plusieurs tables


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2004
    Messages : 161
    Points : 142
    Points
    142
    Par défaut SELECT Complexe sur plusieurs tables
    Bonjour à tous,

    Je travaille en php avec MySql.
    J'ai 3 tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Classe        Groupe          Eleve
    --------       --------       -------
    idclasse      idgroupe        ideleve 
    nom           libelle         nom
    section                       prenom
                                  idclasse
                                  idgroupe
                                  age
    Je dois faire une requete de selection qui me permettra d'avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    idclasse | nom | section | nb_eleve_groupe1 | somme_age_eleve_groupe1 | nb_eleve_autre_groupe
    Pour l'instant je fais plusieurs requetes.
    1 - Selection des infos de la classe
    2 - Pour chaque classe - Selection du nombre d'eleve et de la somme des age avec groupe = 1
    - Selection du nombre d'eleve avec groupe <> 1
    Est-il possible de ne faire qu'une seule requete qui me donnerait directement tous ces résultats ?
    Merci d'avance de votre aide !

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut A peu près
    Essaie qqch approchant ceci :

    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
    select c.idClasse, c.Nom, c.Section, 
     
    Case When g.idGroupe = 1 
    Then Count(e.idEleve) as nb_eleve_groupe1, 
    Sum(e.Age) as somme_age_eleve_groupe1 
     
    Else Count(e.idEleve) as nb_eleve_autre_groupe,
    Sum(e.Age) as somme_age_eleve_autre_groupe 
    End
     
    from Groupe g join Eleve e 
    on   g.idGroupe = e.idGroupe 
     
    join Classe c 
    on c.idClasse = e.idClasse
    Avec un peu de bol, ça devrait marcher sans trop de modifs.

    N'oublie pas de nous faire part de tes découvertes.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2004
    Messages : 161
    Points : 142
    Points
    142
    Par défaut
    Merci.
    Je teste ça et je vous tiens au courant !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2004
    Messages : 161
    Points : 142
    Points
    142
    Par défaut
    J'ai une erreur au niveau de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AS somme_age_eleve_groupe1 
    Else Count(e.idEleve) AS nb_eleve_autre_groupe,
    Ca me met comme erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2004
    Messages : 161
    Points : 142
    Points
    142
    Par défaut
    Finalement, j'ai fai 3 CASE différents pour que ça fonctionne :
    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 c.idClasse, c.Nom, c.Section, 
     
    Case When g.idGroupe = 1 Then Count(e.idEleve) Else 0 End AS nb_eleve_groupe1,
     
    Case When g.idGroupe = 1 Then Sum(e.Age) Else 0 End AS somme_age_eleve_groupe1, 
     
    Case When g.idGroupe <> 1 Then Count(e.idEleve) Else 0 End AS nb_eleve_autre_groupe 
     
    FROM Groupe g JOIN Eleve e 
    ON   g.idGroupe = e.idGroupe 
     
    JOIN Classe c 
    ON c.idClasse = e.idClasse

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    ne me semble pas très cohérent dans ce contexte, mais, bon, si ça marche comme ça, pourquoi se prendre la tête, n'est-ce pas ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2004
    Messages : 161
    Points : 142
    Points
    142
    Par défaut
    Ben en fait, je l'ai rajouté. Comme ça, s'il n'y a pas d'élève qui appartiennent au groupe 1 par exemple, ça me marche 0 au lieu de me renvoyer une valeur null.
    En tous cas, merci pour ton aide !

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

Discussions similaires

  1. select complexe sur plusieurs tables
    Par nicerico dans le forum Requêtes
    Réponses: 7
    Dernier message: 29/09/2011, 15h18
  2. [Oracle] Plusieurs select max() sur plusieurs tables
    Par Xavier2701 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/06/2006, 17h36
  3. select multiple sur plusieurs tables
    Par syl2095 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/12/2004, 15h48
  4. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  5. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50

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