Hãy thử:
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
Khi bạn tổng hợp một số giá trị của Mark để tính giá trị trung bình, không thể sắp xếp theo từng giá trị của Mark . Bạn phải sắp xếp dựa trên kết quả tính toán, tức là Average_Mark .
Từ quan điểm tổng quát hơn, bạn được phép ORDER BY không phải SELECT cột ed chỉ khi cột này là một phần của các bảng được truy vấn và nếu bạn không sử dụng bất kỳ GROUP BY nào hoặc DISTINCT (trừ khi bạn GROUP BY cột này không được hiển thị, thì bạn có thể ORDER BY nó).
Lý do rất đơn giản:Nếu bạn sử dụng GROUP BY hoặc DISTINCT , một số hàng sẽ có khả năng được hiển thị thành một. Các giá trị không được hiển thị trong các hàng "đã hợp nhất" đó có thể khác nhau, làm cho bất kỳ ORDER BY nào không thể với những giá trị đó.
Một số DBMS (ít nhất là MySQL) hoạt động khác nhau, cho phép ORDER ing BY các giá trị không được hiển thị, ngay cả với GROUP BY . Nhưng sau đó MySQL dường như sắp xếp thứ tự theo giá trị gặp phải đầu tiên của giá trị không được hiển thị (xem fiddle ). Vì vậy, tốt hơn hết hãy nhớ rằng điều này nên tránh, để tránh những kết quả không thể tin được.
CHỈNH SỬA: Xem tài liệu
về MySQL GROUP BY xử lý.