Salve, sto studiando il linguaggio SQL e vorrei chiedervi dei chiarimenti riguardo questa query.
"
QUIZ(CodQuiz, Argomento, Punteggio)
STUDENTE(Matricola, Nome, Indirizzo, Città)
RISULTATO TEST(Matricola, CodQuiz, RispostaCorretta)
Trovare matricola e nome degli studenti di Torino che hanno conseguito il punteggio massimo possibile nei quiz di matematica
"
La soluzione proposta nell'esercizio è la seguente (ho marcato in rosso la riga su cui vorrei porre la vostra attenzione):
SELECT S.Matricola, Nome
FROM STUDENTE S,RISULTATO_TEST R,QUIZ Q
WHERE S.Matricola=R.Matricola
AND Q.CodQuiz=R.CodQuiz
AND Citta='Torino'
AND RispostaCorretta='si'
AND Argomento='matematica'
GROUP BY S.Matricola,Nome
HAVING SUM(Punteggio)=(SELECT SUM(Punteggio)
FROM QUIZ
WHERE Argomento='matematica');
Quello che non capisco è: perché "si raggruppa" per S.Matricola invece che per Q.Argomento dato che io calcolo la SUM sull'attributo Q.Punteggio? (tra l'altro se raggruppo solo per S.Matricola non ottengo un ordinamento in base all'attributo Matricola della relazione S? Come faccio a raggruppare per S.Matricola e poi a calcolare SUM(Punteggio) se l'attributo Punteggio si trova nella relazione Q e non in S?)