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

GROUP BY / nhầm lẫn hàm tổng hợp trong SQL

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để chọn các cột từ bảng có giá trị không rỗng?

  2. Từ Thủ tục đã lưu, trả về tham số OUT &con trỏ OUT &kết quả phân tích cú pháp (Oracle)

  3. Tự động gia tăng trong oracle vào bảng đã được tạo

  4. Dấu hai chấm:làm gì trong một truy vấn SQL?

  5. Oracle Database Explorer:Đào tạo và Công nhận Miễn phí