Clause de non-responsabilité: Je suis un SQL newb et c'est pour une classe, mais je pourrais vraiment utiliser un poke dans la bonne direction.Limitations de GROUP BY
J'ai ces trois tables:
student(_sid_, sname, sex, age, year, gpa)
section(_dname_, _cno_, _sectno_, pname)
enroll(_sid_, grade, _dname_, _cno_, _sectno_)
(clés primaires dénotées par des underscores)
Je suis en train d'écrire une requête SQL compatible Oracle qui retourne une table avec le nom de l'étudiant (student.sname
) qui a le plus haut gpa dans chaque section (y compris section.cno
et section.sectno
) ainsi que tous les autres attributs de section
.
J'ai réussi à utiliser une requête globale et GROUP BY
pour obtenir l'AMP maximale pour chaque section:
SELECT MAX(s.gpa), e.cno, e.sectno
FROM enroll e,
student s
WHERE s.sid = e.sid
GROUP BY e.cno, e.sectno
Sans parler des autres attributs section
, je ne peux même pas comprendre comment virer de bord sur la nom de l'étudiant (student.sname
). Si je l'ajoute à la clause SELECT
, il doit être inclus dans GROUP BY
qui gâche le reste de la requête. Si j'utilise cette requête entière à l'intérieur de la clause WHERE
ou FROM
d'une requête externe, je peux seulement accéder aux trois champs de la table, ce qui n'est pas très utile.
Je sais que vous ne pouvez pas me donner la réponse exacte, mais tous les conseils seraient appréciés!
@OMG Poneys: J'aime la façon dont vous formatez les requêtes. – JoshD
@JoshD: nous le faisons tous ;-) – zerkms
Vous l'avez essentiellement dit. Ajoutez la table de section au FROM. Ajoutez des contraintes à la section WHERE to join pour vous inscrire. Ajoutez les colonnes que vous voulez voir au SELECT et répétez-les dans le GROUP BY. – kevpie