Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle:KHÔNG PHẢI LÀ NHÓM THEO LỖI BIỂU DIỄN

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ý.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC - Oracle ArrayIndexOutOfBoundsException

  2. Oracle SQL Developer - Cửa sổ kết quả truy vấn bị thiếu lưới

  3. java.sql.SQLException:ORA-06550:sau khi gọi thủ tục từ mã java

  4. oci_bind_by_name và to_date PHP / OCI / Oracle

  5. Nhận id chèn cuối cùng với Oracle 11g bằng JDBC