Trong SQL chuẩn (nhưng không phải MySQL), khi bạn sử dụng GROUP BY, bạn phải liệt kê tất cả các cột kết quả không phải là tổng hợp trong mệnh đề GROUP BY. Vì vậy, nếu order_details
có 6 cột, thì bạn phải liệt kê tất cả 6 cột (theo tên - bạn không thể sử dụng *
trong mệnh đề GROUP BY hoặc ORDER BY) trong mệnh đề GROUP BY.
Bạn cũng có thể làm:
SELECT order_no, SUM(order_price)
FROM order_details
GROUP BY order_no;
Điều đó sẽ hoạt động vì tất cả các cột không tổng hợp được liệt kê trong mệnh đề GROUP BY.
Bạn có thể làm điều gì đó như:
SELECT order_no, order_price, MAX(order_item)
FROM order_details
GROUP BY order_no, order_price;
Truy vấn này không thực sự có ý nghĩa (hoặc hầu hết có thể là không có ý nghĩa), nhưng nó sẽ 'hoạt động'. Nó sẽ liệt kê từng số đơn đặt hàng riêng biệt và tổ hợp giá đặt hàng, đồng thời sẽ cung cấp (số) mục đơn đặt hàng tối đa được liên kết với giá đó. Nếu tất cả các mặt hàng trong một đơn đặt hàng có giá khác nhau, bạn sẽ kết thúc với các nhóm mỗi hàng một hàng. OTOH, nếu có một số mặt hàng trong đơn đặt hàng ở cùng một mức giá (giả sử 0,99 bảng Anh cho mỗi mặt hàng), thì OTOH sẽ nhóm các mặt hàng đó lại với nhau và trả về số lượng mặt hàng tối đa trong đơn đặt hàng ở mức giá đó. (Tôi giả sử bảng có khóa chính trên (order_no, order_item)
trong đó mặt hàng đầu tiên trong đơn đặt hàng có order_item = 1
, mục thứ hai là 2, v.v.)