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 :

Extraire les 4 meilleures notes de l'élève


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 204
    Points : 77
    Points
    77
    Par défaut Extraire les 4 meilleures notes de l'élève
    bonjour
    s'il vous plait,
    j'ai une table nommée note_z_f_t qui contien 2 champs (usename, note)
    usename ==> les code des eleves
    note ==> les note des eleves dans les matieres

    les eleves peuvent avoir une seul note ou 2 notes ou....jusqu' 8 notes
    moi je veux creer la table eleve_score a partir de note_z_f_t

    extraire les 4 meilleurs notes de chaque eleve dans la table eleve_score

    j'ai fait cette requette mais elle a eliminé touts les eleve qui ont plus que 4 notes ça veut dire plus que 4 venregistrements.
    s'il vous plait veuillez m'aider à réglez ce probleme .

    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
     
    CREATE TABLE eleve_score AS 
     
    SELECT `username` , `note`
    FROM (
     
    SELECT `username` , `note` , ROW_NUMBER(
    )OVER(
    PARTITION
    BY `username`
    ORDER BY `note` DESC
    ) AS rank
    FROM notes_z_f_t
    ) AS ranked_scores
    WHERE rank <=4
    jai essayé cette requette aussi ele les a éliminé

    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
     
     
    SELECT `username` , SUM( CAST( SUBSTRING_INDEX( group_concat, ',', n ) AS DECIMAL ) ) /4 AS divided_values
    FROM (
     
    SELECT `username` , GROUP_CONCAT( `note` ) AS group_concat
    FROM notes_z_f_t
    GROUP BY `username`
    ) AS grouped_data
    CROSS JOIN (
     
    SELECT 1 AS n
    UNION ALL SELECT 2
    UNION ALL SELECT 3
    UNION ALL SELECT 4
    ) AS numbers
    WHERE n <= ( LENGTH( group_concat ) - LENGTH(
    REPLACE (
    group_concat,
    ',',
    ''
    ) ) ) +1
    GROUP BY `username`
    ORDER BY `grouped_data`.`username` ASC

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 187
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 187
    Points : 8 386
    Points
    8 386
    Billets dans le blog
    17
    Par défaut
    extraire les 4 meilleurs notes de chaque eleve dans la table eleve_score
    Les 4 meilleurs notes par élève :

    with dataset as (
    	select all
    		username, note, 
    		row_number() over (partition by username order by note desc) as note_index
    	from note_z_f_t
    )
    select all username, note, note_index
    from dataset
    where note_index <= 4
    ;
    Si un élève a 5 notes 20 => Aura 4 lignes 20
    Si un élève a 1 note 15 => Aura 1 ligne 15

    Si tu veux créer une table dynamiquement :

    create table eleve_score as
    with dataset as (
    	select all
    		username, note, 
    		row_number() over (partition by username order by note desc) as note_index
    	from note_z_f_t
    )
    select all username, note, note_index
    from dataset
    where note_index <= 4
    ;
    Mais tu devrais plutôt en faire une vue.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 187
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 187
    Points : 8 386
    Points
    8 386
    Billets dans le blog
    17
    Par défaut
    (ta réponse n'est pas passée)
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 204
    Points : 77
    Points
    77
    Par défaut
    un grand merci pour vous

    requete bien marché

    avec tout mes respects

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

Discussions similaires

  1. [MySQL] Afficher les 5 meilleurs clients, salles,.. en fonction de la note, de l'achat,..
    Par Valadone dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/05/2015, 17h16
  2. [FAQ]Extraire les mails de la boîte de reception avec Lotus Notes
    Par Coin dans le forum Vos contributions VB6
    Réponses: 7
    Dernier message: 11/07/2013, 14h41
  3. Sélectionner les meilleures notes dans un tableau
    Par armoirapizza dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 30/06/2011, 17h04
  4. extraire les notes de musique d'une Image
    Par elisequeen dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/10/2010, 20h24
  5. [MySQL] Comment Extraire les 15 meilleurs résultats
    Par Songoku77 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 11/08/2010, 08h41

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