Prueba:
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
A medida que agrega varios valores de Mark
para calcular el promedio, se vuelve imposible ordenar cada valor de Mark
. Tienes que ordenar el resultado del cálculo, es decir, Average_Mark
.
Desde un punto de vista más general, se le permite ORDER BY
un no SELECT
ed columna solo si esta columna es parte de las tablas consultadas y si no usa ningún GROUP BY
o DISTINCT
(a menos que GROUP BY
esta columna no mostrada, entonces puede ORDER BY
eso).
La razón es simple:si usa GROUP BY
o DISTINCT
, varias filas se mostrarán potencialmente como una sola. Los valores no mostrados en esas filas "combinadas" pueden ser potencialmente diferentes entre sí, lo que hace que cualquier ORDER BY
imposible en esos valores.
Algunos DBMS (al menos MySQL) se comportan de manera diferente, lo que permite ORDER
ing BY
valores no mostrados, incluso con GROUP BY
. Pero MySQL parece ordenar por el primer valor encontrado del valor no mostrado (ver fiddle ). Por lo tanto, mejor tenga en cuenta que esto debe evitarse para evitar resultados impredecibles.
EDITAR: Consulte la documentación
sobre MySQL GROUP BY
manipulación.