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?