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.