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 .
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 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
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
Partager