bonjour,
deux tables de ma base de données
Table1
1 2 3 4 5 6 7 8 9 10 11 12
| +----+----------+------------+
| id | nom | note |
+----+----------+------------+
| 1 | Bertrand | 17 |
| 2 | Charles | 10 |
| 3 | Alex | 12 |
| 4 | David | 11 |
| 5 | Eric | 20 |
| 6 | François | 20 |
| 7 | Gaston | 18 |
| 8 | Henri | 20 |
+----+----------+------------+ |
Table2
contient combien d'étudiants dans chaque groupe en fonction de leur nombre
1 2 3 4 5 6 7 8 9
| -------------------------------------------
Nombretudiant| group1 | group2 | group3 |
-----------------------------------------
1 | 1 | 0 | 0 |
2 | 2 | 0 | 0 |
3 | 2 | 1 | 0 |
4 | 2 | 2 | 0 |
5 | 2 | 2 | 1 |
----------------------------------------- |
Je veux diviser les étudiants en 3 groupes, et les étudiants avec les notes les plus élevées doivent aller dans le premier groupe, etc., et les étudiants ne doivent pas être répétés dans d'autres groupes. J'ai dans Table1.
select count(id) from table1 as total
, puis je cherche dans la table2 la ligne où la colonne Nombretudiant =total de chaque groupe
Par exemple, si j'ai 5 étudiants, je les divise en 3 groupes en fonction du nombre de Table2.
Tableau 2
1 2 3
| NumberStudent| group1 | group2 | group3 |
-----------------------------------------
5 | 2 | 2 | 1 | |
J'ai 2 étudiants du groupe 1, 2 étudiants du groupe 2, 1 étudiant du groupe 3
1 2 3
| select nom,note from Table1
where note >=10
order by note row //from table2 (comment puis-je obtenir le nombre de ROW = 2 comme paramètre ) |
Le groupe 2 a 2 étudiants qui ne sont pas trouvés dans le groupe1
1 2 3
| select nom,note from Table1
where note >=15 and id<> id // l'étudiant en groupe2 ne mentionne pas en groupe1
order by note row //from table2 (group2 pour 5 étudiants est 2, donc ROW = 2) |
Le groupe 3 a 1 étudiant qui ne sont pas trouvés dans le groupe1 et groupe2
1 2 3
| select nom,note from Table1
where note >17 and id<> id // l'étudiant en groupe2 ne mentionne pas dans groupe1 and groupe 2
order by note row //from table2 (group3 pour 5 étudiants est 1, donc ROW = 1) |
Le résultat devrait être
1 2 3 4 5
| 1 Henri 20 group1
2 Eric 20 group1
3 François 20 group2
4 Gaston 18 group2
5 Bertrand 17 group3 |
ou il y a une autre méthode
Partager