sous requete dans même table

Eléphanteau du PHP | 16 Messages

27 déc. 2018, 11:24

table :
classe | prenom | note
CM2      JULES    15
CM2      YANN     12
CM2      NOEL      8
CM2      ABDEL    13
CM1      LILOU    16
CM1      ZOE       4
CM1      JEAN     11
Bonjour et bonnes fêtes à tous,

voilà mon problème sur lequel je bute
j'aimerais sélectionner les 2 moins bons de chaque classe
j'imagine qu'il faut une utiliser sous requête
mais j'avoue que je ne vois pas comment m'y prendre
merci de votre aide

Mammouth du PHP | 546 Messages

28 déc. 2018, 00:31

salut,
avec mysql 5:
SELECT e1.classe, e1.prenom, e1.note FROM eleves e1
WHERE ( 
		SELECT COUNT(1) FROM eleves e2  WHERE e2.classe = e1.classe AND e2.note<=e1.note
		) <= 2
ORDER BY e1.classe, e1.note		
sinon avec mysql 8, il devient plus facile de faire un classement avec la fonction RANK() et l'argument PARTITION BY qui partitionne un jeu de resultat

Eléphanteau du PHP | 16 Messages

28 déc. 2018, 09:28

merci beaucoup pour ta réponse
ça fonctionne !
mais avec 11000 élèves dans 550 classes
ça prend 6 à 7s de traitement :-(

Mammouth du PHP | 546 Messages

28 déc. 2018, 14:40

en même temps tu ne devrais quand même pas afficher 11000 enregistrements sans pourtant effectuer la pagination?
Tu peux placer la clause LIMIT 100 à la fin de la requête.