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!