Olá, estou cursando a parte de sub-queries do SQL Server II e gostaria de saber qual seria a melhor forma de consultar a média de cada aluno por curso, a média do curso e a diferença entre as médias. Meu código ficou assim:
USE SQL_AVANCADO;
SELECT A1.NOME, C1.NOME,
(SELECT AVG(NC.NOTA) AS MEDIA_CURSO FROM NOTA NC
INNER JOIN RESPOSTA R ON R.ID = NC.RESPOSTA_ID
INNER JOIN EXERCICIO E ON E.ID = R.EXERCICIO_ID
INNER JOIN SECAO S ON S.ID = E.SECAO_ID
INNER JOIN CURSO C ON C.ID = S.CURSO_ID
WHERE C.ID = C1.ID) MEDIA_CURSO,
(SELECT AVG(NA.NOTA) AS MEDIA_ALUNO FROM NOTA NA
INNER JOIN RESPOSTA R ON R.ID = NA.RESPOSTA_ID
INNER JOIN EXERCICIO E ON E.ID = R.EXERCICIO_ID
INNER JOIN SECAO S ON S.ID = E.SECAO_ID
INNER JOIN CURSO C ON C.ID = S.CURSO_ID
INNER JOIN ALUNO A ON A.ID = R.ALUNO_ID
WHERE C.ID = C1.ID
AND A.ID = A1.ID) MEDIA_ALUNO,
((SELECT AVG(NC.NOTA) AS MEDIA_CURSO FROM NOTA NC
INNER JOIN RESPOSTA R ON R.ID = NC.RESPOSTA_ID
INNER JOIN EXERCICIO E ON E.ID = R.EXERCICIO_ID
INNER JOIN SECAO S ON S.ID = E.SECAO_ID
INNER JOIN CURSO C ON C.ID = S.CURSO_ID
WHERE C.ID = C1.ID) -
(SELECT AVG(NA.NOTA) AS MEDIA_ALUNO FROM NOTA NA
INNER JOIN RESPOSTA R ON R.ID = NA.RESPOSTA_ID
INNER JOIN EXERCICIO E ON E.ID = R.EXERCICIO_ID
INNER JOIN SECAO S ON S.ID = E.SECAO_ID
INNER JOIN CURSO C ON C.ID = S.CURSO_ID
INNER JOIN ALUNO A ON A.ID = R.ALUNO_ID
WHERE A.ID = A1.ID
AND C.ID = C1.ID)) AS DIFERENCA
FROM NOTA N
INNER JOIN RESPOSTA R ON R.ID = N.RESPOSTA_ID
INNER JOIN EXERCICIO E ON E.ID = R.EXERCICIO_ID
INNER JOIN SECAO S ON S.ID = E.SECAO_ID
INNER JOIN CURSO C1 ON C1.ID = S.CURSO_ID
INNER JOIN ALUNO A1 ON A1.ID = R.ALUNO_ID
GROUP BY A1.NOME, C1.NOME, A1.ID, C1.ID
ORDER BY A1.NOME, C1.NOME
Seria essa uma boa forma de consultar? Existe alguma forma mais adequada?
Desde já agradeço!