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

Requêtes MySQL Discussion :

Requête SQL sur plusieurs tables


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 33
    Points : 2
    Points
    2
    Par défaut Requête SQL sur plusieurs tables
    Bonjour,

    J'ai 4 tables dans ma bdd,

    1) SITE {id_site , nom_site}
    2) ELEVE {id_elev, nom_elev, etat, id_site}
    3) PROF {id_prof, nom_prof, id_site}
    4) STAGIAIRE {id_sta, nom_elev, id_site}

    J'aimerais une requete SQL (Mysql) pour avoir un tableau comme ça:

    N° | SITE | TotNbre d'eleve inscrit | Nbre eleve actif | Nbre eleve inactif | Nbre stagiaire accueillis | Nbre profs
    1 | Site1 | 60 | 55 | 5 | 3 | 5
    2 | Site2 | 150 | 125 | 0 | 1 | 6



    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Qu'as-tu déjà essayé comme requête(s) ?
    Où rencontres-tu un problème ?
    Quelle version de MySQL utilises-tu ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 33
    Points : 2
    Points
    2
    Par défaut
    J'utilise phpMyAdmin Version : 4.8.3

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut kerllymay.

    Il n'y a aucune difficulté si vous savez faire des jointures et des sous-requêtes.

    Analysons le résultat que vous cherchez à obtenir :

    1) "N°" et "Site", vous les récupérez dans la table "site" respectivement les colonnes "id_site" et "nom_site". Aucune difficulté !

    2) "TotNbre d'eleve inscrit".
    Pour calculer le nombre total d'élève par site, vous devez faire un count() sur la colonne "id_eleve".
    Il ne faut pas prendre la totalité de la table, mais uniquement les lignes qui sont liés par la colonne "id_site".
    Autrement dit, vous devez faire un "group by" dans une sous-requête afin d'isoler le calcul.
    Si vous ne le faites pas, vous aurez un produit cartésien et de ce fait, les résultats seront faux.

    3) "Nbre eleve actif" & "Nbre eleve inactif".
    Je suppose que nous savons distinguer actif d'inactif à partir de la colonne "etat".
    Et le résultat devra donner : actif + inactif = total des élèves.
    Dans ce cas, vous devez utiliser un case pour faire la distinction.
    Ce calcul devra se faire en même temps que le 2).

    4) "Nbre stagiaire accueillis".
    Même remarque que le 2) sauf que vous devez faire la même chose sur la table "stagiaire".

    5) "Nbre profs".
    Même remarque que le 2) sauf que vous devez faire la même chose sur la table "prof".

    Ce qui donne la requête suivante :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    select           t1.id_site   as N°,
                     t1.nom_site  as Site,
                     t2.Nbre_Eleve,
                     t2.Eleves_Actif,
                     t2.Eleves_Inactif,
                     t3.Nbre_Stagiaire,
                     t4.Nbre_Prof
     
               from  site as t1
     
    left outer join  (  select  id_site,
                                count(id_eleve)                                      as Nbre_eleve,
                                sum(case when etat like 'actif'   then 1 else 0 end) as Eleves_Actif,
                                sum(case when etat like 'inactif' then 1 else 0 end) as Eleves_Inactif
                          from  eleve
                      group by  id_site
                     ) as t2
                 on  t2.id_site = t1.id_site
     
    left outer join  (  select  id_site,
                                count(id_sta) as Nbre_Stagiaire
                          from  stagiaire
                      group by  id_site
                     ) as t3
                 on  t3.id_site = t1.id_site
     
    left outer join  (  select  id_site,
                                count(id_prof) as Nbre_Prof
                          from  prof
                      group by  id_site
                     ) as t4
                 on  t4.id_site = t1.id_site;
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    Avec une CTE c'est plus classe !

    3 petites lignes et c'est lisible !

  6. #6
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 33
    Points : 2
    Points
    2
    Par défaut
    Salut Artemus24 merci pour ton intervention

    J'ai essayé ta requête mais il y a un message d'erreur que voici :

    #1064 - Erreur de syntaxe près de 'from eleve group by id
    ) as t2
    on ' à la ligne 15

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut kerllymay.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sum(case when etat like 'inactif' then 1 else 0 end) as Eleves_Inactif,
                          from  eleve
    Mon erreur favorite, la virgule de trop !

    Avez-vous compris comment j'ai procédé pour créer cette requête ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 33
    Points : 2
    Points
    2
    Par défaut
    Salut Artemus24


    Merci pour ton implication

    Je suis très satisfait de ton aide, car tu m'as donné la réponse a ma question

  9. #9
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 33
    Points : 2
    Points
    2
    Par défaut
    Salut,

    Comment faire pour afficher c'est résultat dans un tableau HTML?

    Aide svp

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

Discussions similaires

  1. [AC-2003] Traduction en VBA d'une requête Sélection SQL sur plusieurs tables
    Par Pucho Faritas dans le forum VBA Access
    Réponses: 9
    Dernier message: 29/10/2009, 10h32
  2. [SQL] Requête complexe sur plusieurs tables
    Par BFH dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/09/2007, 16h21
  3. requêtes sql sur plusieurs tables
    Par zahiton dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/11/2005, 10h59
  4. [SQL] requêtes SQL sur plusieurs tables
    Par zahiton dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/11/2005, 16h32
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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