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

Tại sao các hàm tổng hợp không được phép trong mệnh đề where

Lý do bạn không thể sử dụng SUM() trong WHERE mệnh đề là thứ tự đánh giá của các mệnh đề.

FROM cho bạn biết vị trí để đọc các hàng. Ngay khi các hàng được đọc từ đĩa vào bộ nhớ, chúng được kiểm tra để tìm WHERE điều kiện. (Trên thực tế, trong nhiều trường hợp, các hàng không thành công WHERE mệnh đề thậm chí sẽ không được đọc từ đĩa. "Điều kiện" được chính thức gọi là vị từ và một số vị từ được sử dụng - bởi công cụ thực thi truy vấn - để quyết định hàng nào được đọc từ các bảng cơ sở. Đây được gọi là quyền truy cập vị ngữ.) Như bạn có thể thấy, WHERE mệnh đề được áp dụng cho mỗi hàng khi nó được trình bày cho động cơ.

Mặt khác, việc tổng hợp chỉ được thực hiện sau khi tất cả các hàng (xác minh tất cả các vị từ) đã được đọc.

Hãy nghĩ về điều này:SUM() CHỈ áp dụng cho các hàng thỏa mãn WHERE điều kiện. Nếu bạn đặt SUM() trong WHERE , bạn đang yêu cầu logic vòng tròn. Một hàng mới có vượt qua WHERE không mệnh đề? Sao tôi biết được? Nếu nó vượt qua, thì tôi phải đưa nó vào SUM , nhưng nếu không, nó sẽ không được đưa vào SUM . Vậy làm cách nào để tôi đánh giá cả SUM điều kiện?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-20001 trong R12 Thu thập thống kê giản đồ về 11g (FND_HISTOGRAM_COLS)

  2. Làm cách nào để thay đổi định dạng ngày từ MM / DD / YYYY thành YYYY-MM-DD trong PL / SQL?

  3. Sử dụng các tham số với kết nối ODBC Oracle

  4. Sự cố khi so sánh kết quả của to_char (myDate, 'DAY') với một chuỗi

  5. Oracle 11g trên Mac OS X