2010-02-04 39 views
20

Tôi đang hoàn toàn học SQL ngay bây giờ và đã xem qua mệnh đề GROUP BY.Bất kỳ lý do nào cho mệnh đề GROUP BY không có chức năng tổng hợp?

GROUP BY tổng hợp hoặc nhóm các resultset theo (các) đối số bạn đưa ra. Nếu bạn sử dụng mệnh đề này trong truy vấn, bạn có thể thực hiện các hàm tổng hợp trên resultset để tìm thông tin thống kê trên resultset như tìm số trung bình (AVG()) hoặc tần số (COUNT()).

Câu hỏi của tôi là: là câu lệnh GROUP BY theo bất kỳ cách nào hữu ích mà không có hàm tổng hợp kèm theo không?

Cập nhật Sử dụng GROUP BY như một từ đồng nghĩa với DISTINCT là (có thể) một ý tưởng tồi vì tôi nghi ngờ nó là chậm hơn.

Trả lời

13

là câu lệnh GROUP BY theo bất kỳ cách nào hữu ích mà không có hàm tổng hợp kèm theo?

Sử dụng DISTINCT sẽ là một từ đồng nghĩa trong một tình huống như vậy, nhưng lý do bạn muốn/phải xác định một điều khoản GROUP BY sẽ được theo thứ tự để có thể xác định HAVING chi tiết khoản.

Nếu bạn cần phải xác định một điều khoản HAVING, bạn để xác định một GROUP BY - bạn không thể làm điều đó kết hợp với DISTINCT.

+1

Vì vậy, câu trả lời của bạn là "không", phải không? –

+0

@Niels: Phụ thuộc vào dữ liệu và mô hình dữ liệu, nhưng IME tôi chưa bao giờ có nhu cầu mà tôi có thể gọi lại –

6

Bạn có thể thực hiện một DISTINCT chọn bằng cách sử dụng một GROUP THEO mà không cần bất kỳ uẩn.

-2

Được sử dụng cho nhiều chức năng tổng hợp hơn.

Ví dụ, hãy xem xét đoạn mã sau:

SELECT product_name, MAX('last_purchased') FROM products GROUP BY product_name 

này sẽ trở lại chỉ có 1 kết quả cho mỗi sản phẩm, nhưng với mới nhất của giá trị được cập nhật các hồ sơ đó.

+3

'MAX()' là hàm tổng hợp. –

+0

@am: Neils hỏi về sử dụng mà không có hàm tổng hợp –

+0

Nó không tổng hợp, nó chọn một giá trị duy nhất từ ​​danh sách. _Tổng hợp là tập hợp các mục được tập hợp lại với nhau để tạo thành tổng số_ – Amirshk

6

Đoàn tự do có thể sử dụng trong Hai cách Majorly
1) trong Cùng với các chức năng SQL tập hợp
2) để loại bỏ hàng trùng lặp từ kết quả một thiết

SO câu trả lời cho những lời nói dối câu hỏi của bạn trong phần thứ hai của USE ở trên được mô tả.

1

Lưu ý: tất cả mọi thứ dưới đây chỉ áp dụng cho MySQL

GROUP BYguaranteed để trả về kết quả theo thứ tự, DISTINCT thì không.

GROUP BY cùng với ORDER BY NULL có cùng hiệu quả như DISTINCT (và được triển khai theo cách nói).Nếu có chỉ mục trên trường được tổng hợp (hoặc được phân biệt), cả hai mệnh đề đều sử dụng quét chỉ mục lỏng lẻo trên trường này.

Trong GROUP BY, bạn có thể trả lại các cụm từ không được nhóm và không được tổng hợp. MySQL sẽ chọn bất kỳ giá trị ngẫu nhiên nào từ nhóm tương ứng để tính toán biểu thức.

Với GROUP BY, bạn có thể bỏ qua các biểu thức GROUP BY từ mệnh đề SELECT. Với DISTINCT, bạn không thể. Mỗi hàng được trả về bởi một DISTINCT được đảm bảo là duy nhất.

Các vấn đề liên quan