Tentar:
SELECT c.courseid,
c.coursename,
AVG(a.mark) AS Average_Mark
FROM COURSE c
INNER JOIN ASSESSMENT a
ON c.courseid = a.courseid
GROUP BY c.courseid,
c.coursename
ORDER BY 3 DESC; -- or ORDER BY Average_Mark DESC
Conforme você agrega vários valores de
Mark
para calcular a média, torna-se impossível classificar cada valor de Mark
. Você precisa classificar o resultado do cálculo, ou seja, Average_Mark
. De um ponto de vista mais geral, você tem permissão para
ORDER BY
um não SELECT
ed somente se esta coluna fizer parte das tabelas consultadas e se você não usar nenhum GROUP BY
ou DISTINCT
(a menos que você GROUP BY
esta coluna não exibida, então você pode ORDER BY
isto). A razão é simples:se você usar
GROUP BY
ou DISTINCT
, várias linhas serão potencialmente exibidas como uma. Os valores não exibidos nessas linhas "mescladas" podem ser potencialmente diferentes uns dos outros, tornando qualquer ORDER BY
impossível nesses valores. Alguns SGBDs (pelo menos MySQL) se comportam de forma diferente, permitindo
ORDER
ing BY
valores não exibidos, mesmo com GROUP BY
. Mas o MySQL parece então ordenar pelo primeiro valor encontrado do valor não exibido (veja fiddle ). Portanto, é melhor ter em mente que isso deve ser evitado, para evitar resultados imprevisíveis. EDITAR: Consulte a documentação sobre MySQL
GROUP BY
manipulação.