Đây là thứ tự về cách mọi thứ được thực thi trong công cụ cơ sở dữ liệu.
Lưu ý rằng đây là một dạng xem ngữ nghĩa về cách mọi thứ được thực thi, cơ sở dữ liệu có thể thực hiện mọi thứ theo một thứ tự khác, nhưng nó phải tạo ra kết quả như thể nó đã được thực hiện theo cách này.
- Đầu tiên, phần TỪ được đánh giá, tôi lấy dữ liệu từ đâu
- Sau đó, phần WHERE được đánh giá, chúng tôi quan tâm đến những hàng nào
- Sau đó, phần NHÓM BY được đánh giá, làm cách nào để chúng tôi kết hợp các hàng kết quả
- Sau đó, phần CÓ ĐƯỢC sẽ được đánh giá, chúng tôi quan tâm đến những nhóm nào
- Sau đó, phần ORDER BY được đánh giá, chúng ta muốn các hàng / nhóm đó theo thứ tự nào
- Cuối cùng, phần CHỌN được đánh giá, chúng tôi quan tâm đến những cột nào
Tuy nhiên, một số công cụ cơ sở dữ liệu cho phép bạn phá vỡ điều này, bằng cách đặt "GROUP BY 2" để nhóm theo cột thứ 2 trong phần CHỌN, nhưng nếu bạn tuân theo thứ tự trên, bây giờ bạn nên biết rằng lý do mà mã của bạn không 'không hiệu quả là không có cột nào có tên là total hoặc total2 (chưa).
Nói cách khác, bạn cần lặp lại hai biểu thức hoặc tìm cách thực hiện khác.
Những gì bạn có thể làm là sử dụng một truy vấn phụ (miễn là bạn đang sử dụng phiên bản MySQL hỗ trợ điều này):
SELECT total, total2, total+total2 as grandtotal
FROM (
SELECT sum(EXPR) as total, sum(EXPR) as total2
FROM tablename
) x
Đánh dấu phần còn lại theo nhận xét.
Mặc dù vậy, tôi không biết nhiều về MySQL nên bạn có thể phải đặt bí danh cho truy vấn phụ:
...
FROM tablename
) AS x
^-+^
|
+-- add this
Một số công cụ cơ sở dữ liệu cũng không cho phép sử dụng từ khóa AS khi truy vấn phụ bí danh, vì vậy nếu cách trên không hoạt động, hãy thử cách này:
...
FROM tablename
) x
^
|
+-- add this