Tôi cần một chút giúp đỡ thẳng ra một cái gì đó, tôi biết đó là một câu hỏi dễ dàng rất dễ dàng nhưng đó là một cái gì đó mà là hơi khó hiểu tôi trong SQL.GROUP BY/tổng hợp chức năng nhầm lẫn trong SQL
Truy vấn SQL này ném lỗi 'không phải là biểu tượng GROUP BY' trong Oracle. Tôi hiểu tại sao, như tôi biết rằng khi tôi nhóm theo một thuộc tính của một bộ dữ liệu, tôi không còn có thể truy cập vào bất kỳ thuộc tính nào khác.
SELECT *
FROM order_details
GROUP BY order_no
Tuy nhiên cái này không làm việc
SELECT SUM(order_price)
FROM order_details
GROUP BY order_no
Chỉ cần để bê tông hiểu biết của tôi về vấn đề này .... Giả sử rằng có nhiều bản ghi trong ORDER_DETAILS cho mỗi đơn hàng đó được thực hiện, một khi tôi nhóm tuples theo order_no, tôi vẫn có thể truy cập thuộc tính order_price cho từng tuple riêng lẻ trong nhóm, nhưng chỉ sử dụng một hàm tổng hợp?
Nói cách khác, các hàm tổng hợp khi được sử dụng trong mệnh đề SELECT có thể đi sâu vào nhóm để xem các thuộc tính 'ẩn', ở đó chỉ cần sử dụng 'SELECT order_no' sẽ phát sinh lỗi?
Cảm ơn sự giúp đỡ của bạn trong việc làm rõ điều này, tôi đã gặp khó khăn khi tìm câu trả lời cho câu hỏi cụ thể này trên Google.
Chris
OK, vì vậy sau khi GROUP BY được thực hiện, tất cả các bộ dữ liệu riêng lẻ cho một đơn đặt hàng cụ thể vẫn có thể truy cập được bằng các hàm tổng hợp. Nghĩa là hàm SUM vẫn có thể truy cập thuộc tính order_price của mỗi bộ dữ liệu, mặc dù các bộ dữ liệu đó đã được nhóm lại với nhau bởi order_no? – Chris
@ Chris: có, nhiều hơn hoặc ít hơn. Bạn có thể nghĩ rằng GROUP BY phân chia các hàng trong bảng thành các nhóm; mỗi nhóm có cùng một tập hợp các giá trị cho các cột được liệt kê trong mệnh đề GROUP BY. Các tập hợp sau đó hoạt động trên bất kỳ cột nào được chỉ định, với tổng hợp được tính toán trên các hàng trong nhóm. Kết quả sau đó bao gồm một hàng cho mỗi nhóm, với các giá trị cột GROUP BY cộng với các tập hợp liên quan. Hummm ... Tôi hy vọng điều đó rõ ràng ... –
Đúng là nó đã hoàn toàn xóa nó đi xa như tôi có thể nói. Cảm ơn rất nhiều Jonathan và cảm ơn những người khác đã trả lời! – Chris