Demande d'aide pour la syntaxe d'une requête SQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Demande d'aide pour la syntaxe d'une requête SQL

Re: Demande d'aide pour la syntaxe d'une requête SQL

par moogli » 24 nov. 2012, 14:05

salut,


il va te falloir faire une sous requete.


pour info une jointure entre table utilise le mot clef join, ceci afin de ne pas mélanger le prédicat de la jointure. http://sqlpro.developpez.com/cours/sqlaz/jointures/
sans fonction sur les groupes (genre count ou sum) le group by ne doit pas servir a rien, de même que le limit si tu a tout les étudiants.
ta requête serait donc
SELECT etudiants.Nom, notes.Cours, Valeur
FROM notes
join etudiants ON Numero = notes.NumEtudiant
ORDER BY notes.Cours
avec ça tu as toutes les notes des étudiants

si tu veux les meilleurs notes par cours tu va utiliser max et un group by (par exemple)
SELECT etudiants.Nom, notes.Cours, max(Valeur)
FROM notes
join etudiants ON Numero = notes.NumEtudiant
group by  notes.Cours
ORDER BY notes.Cours
tu auras ton les 1er de chaque cours

pour finir et faire bien il faut utiliser les fonctions olap http://sqlpro.developpez.com/article/ol ... se-window/


@+

Demande d'aide pour la syntaxe d'une requête SQL

par YShi » 24 nov. 2012, 12:43

Bonjour à tous,
voilà, je dois effectuer la requête suivante :
Quels sont les noms des 3 premiers étudiants de chaque cours? Donner les noms des cours et des étudiants correspondants, en triant par les noms de cours. On considère les 3 premiers au sens strict (e.g., si pour un cours 4 étudiants ont la même meilleure note, dans ce cas il n'y a pas 3 étudiants " premiers " pour ce cours).

Pour le moment, je n'ai écris que ceci :
SELECT etudiants.Nom, notes.Cours, Valeur
FROM etudiants, notes
WHERE Numero = notes.NumEtudiant
GROUP BY Numero
ORDER BY notes.Cours LIMIT 0, 99

J'affiche donc tout les étudiants, ce qui me pose problème c'est restreindre aux 3 premiers par matière seulement, et au sens strict.

Pourriez m'expliquer comment l'exprimer ?
Merci d'avance