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 :

Fonction MAX sur les lignes


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut Fonction MAX sur les lignes
    je cherche une methode pour afficher la note maximale d'un étudiant pour chaque module car il passe plusieurs examens et j'en choisis la plus grande.
    voici la table
    etud_mod (matricule, cod_mod, note_examen1, note_examen2, note_examen3, coefficient);
    merci

  2. #2
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    c'est pas normalisé ça, 3 notes pour un étudiant ;o) Dommage, ça aurait été simple, sinon. Là, je n'ai pas de solution simple à part écrire une prodécure...

  3. #3
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Effectivement, ce n'est pas normalisé, donc gymnastique et pirouettes avec du SQL. ici, la solution est de passer par une pseudo table ramenant les 3 notes dans une sous-requête avec des UNION :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT matricule, Max(note) 
      FROM (SELECT matricule, code_mod, note_examen1 as note
            UNION
            SELECT matricule, code_mod, note_examen2 as note
            UNION
            SELECT matricule, code_mod, note_examen3 as note)
     GROUP BY matricule;

  4. #4
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut
    comment dois-je normaliser tout en gardant les trois notes stockées

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Je te proposerais bien un truc pas trop compliqué et assez souple, du style :

    - une table "personne" ou "étudiant" (clé, nom, prénom, etc.),
    - une table "matière" (clé, réf, nom, etc.),
    - une table "examen" (clé, date, clé matière, coef)
    - une table "note" (clé, clé personne, clé examen)

    Si tu as besoin s'inspiration, va jeter un oeil ici : http://sql.developpez.com/

    Tu y trouveras en particulier :
    - La base de données exemple (gestion d'un hôtel)
    - Modélisation MERISE

  6. #6
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut
    merci pour l'aide.
    mais je ne vois toujours pas pourquoi ma modélisation est mauvaise car le nombre d'examens est fixe

  7. #7
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Les deux façons de voir sont justes. Après c'est toi qui choisis.

  8. #8
    Invité(e)
    Invité(e)
    Par défaut Re: Fonction MAX sur les lignes
    Citation Envoyé par yostane
    je cherche une methode pour afficher la note maximale d'un étudiant pour chaque module car il passe plusieurs examens et j'en choisis la plus grande.
    voici la table
    etud_mod (matricule, cod_mod, note_examen1, note_examen2, note_examen3, coefficient);
    merci




    select matricule,exam,max(cod_mod) from (
    select

    table_exam.matricule matricule,
    table_exam.cod_mod cod_mod ,
    table_exam.note_examen1 exam,


    from

    ( select matricule,note_examen1,max(cod_mod) cod_mod from table_exam
    group by matricule,note_examen1) t1,table_exam

    where table_exam.cod_mod = table_exam.cod_mod
    union all
    select

    table_exam.matricule matricule,
    table_exam.cod_mod cod_mod ,
    table_exam.note_examen2 exam,


    from

    ( select matricule,note_examen2,max(cod_mod) cod_mod from table_exam
    group by matricule,note_examen2) t1,table_exam

    where table_exam.cod_mod = table_exam.cod_mod
    union all
    select

    table_exam.matricule matricule,
    table_exam.cod_mod cod_mod ,
    table_exam.note_examen3 exam,


    from

    ( select matricule,note_examen3,max(cod_mod) cod_mod from table_exam
    group by matricule,note_examen3) t1,table_exam

    where table_exam.cod_mod = table_exam.cod_mod ) group by matricule,exam

Discussions similaires

  1. Appliquer une fonction sur les lignes d'un fichier
    Par sconrad dans le forum Langage
    Réponses: 2
    Dernier message: 05/07/2012, 15h26
  2. [Débutant] Fonction pour faire un Substring sur les lignes d'un fichier
    Par Lhtldrn dans le forum C#
    Réponses: 2
    Dernier message: 23/06/2012, 13h17
  3. [VxiR2] Fonction max sur les 5 plus hautes valeurs d'un indicateur
    Par ktrin2002 dans le forum Webi
    Réponses: 2
    Dernier message: 30/04/2012, 16h26
  4. Fonction MAX sur les propriétés d'un objet
    Par mleddet dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/09/2009, 15h34
  5. statistiques sur les lignes et colonnes d'un fichier
    Par ericbareke dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2006, 16h09

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