Disclaimer: Sono un newb SQL e questo è per una classe, ma potrei davvero usare un poke nella giusta direzione.Limitazioni di GROUP BY
ho queste tre tabelle:
student(_sid_, sname, sex, age, year, gpa)
section(_dname_, _cno_, _sectno_, pname)
enroll(_sid_, grade, _dname_, _cno_, _sectno_)
(chiavi primarie indicati con trattini)
Sto cercando di scrivere una query SQL compatibile con Oracle che restituisce una tabella con il nome dello studente (student.sname
) con il valore gpa più alto in ogni sezione (compresi section.cno
e section.sectno
) e tutti gli altri attributi da section
.
Sono riuscito a utilizzare una query di aggregazione e GROUP BY
per ottenere il massimo GPA per ogni sezione:
SELECT MAX(s.gpa), e.cno, e.sectno
FROM enroll e,
student s
WHERE s.sid = e.sid
GROUP BY e.cno, e.sectno
Figuriamoci gli altri section
attributi, non riesco nemmeno a capire come per virare sulla nome dello studente (student.sname
). Se lo aggiungo alla clausola SELECT
, deve essere incluso in GROUP BY
, che compromette il resto della query. Se utilizzo questa intera query all'interno della clausola WHERE
o FROM
di una query esterna, posso accedere solo ai tre campi della tabella, che non sono molto utili.
So che non puoi darmi la risposta esatta, ma ogni suggerimento sarebbe apprezzato!
@OMG Ponies: mi piace il modo in cui formatti le query. – JoshD
@JoshD: lo facciamo tutti ;-) – zerkms
L'hai praticamente detto. Aggiungi la tabella delle sezioni a FROM. Aggiungi vincoli alla sezione DOVE per partecipare alla registrazione. Aggiungi le colonne che desideri siano visibili a SELECT e ripeterle in GROUP BY. – kevpie