GROUP BY
ánh xạ các nhóm hàng thành một hàng, cho mỗi giá trị riêng biệt trong cụ thể , thậm chí không nhất thiết phải có trong danh sách chọn.
SELECT b, c, d FROM table1 GROUP BY a;
Truy vấn này là SQL hợp pháp ( sửa: chỉ trong MySQL; thực ra nó không phải là SQL tiêu chuẩn và không được các thương hiệu khác hỗ trợ). MySQL chấp nhận nó và nó tin tưởng rằng bạn biết mình đang làm gì, chọn b
, c
và d
theo một cách rõ ràng vì chúng phụ thuộc chức năng của a
.
Tuy nhiên, Microsoft SQL Server và các thương hiệu khác không cho phép truy vấn này, vì nó không thể xác định các phụ thuộc chức năng một cách dễ dàng. chỉnh sửa: Thay vào đó, SQL chuẩn yêu cầu bạn tuân theo Quy tắc giá trị đơn , tức là mọi cột trong danh sách chọn phải được đặt tên trong GROUP BY
mệnh đề hoặc nếu không là một đối số cho một hàm đã đặt.
Trong khi DISTINCT
luôn xem xét tất cả các cột trong danh sách chọn và chỉ những cột đó. Một quan niệm sai lầm phổ biến rằng DISTINCT
cho phép bạn chỉ định các cột:
SELECT DISTINCT(a), b, c FROM table1;
Mặc dù có dấu ngoặc đơn tạo nên DISTINCT
trông giống như lệnh gọi hàm, nó không phải vậy. Đó là một tùy chọn truy vấn và một giá trị khác biệt trong bất kỳ trường nào trong ba trường của danh sách chọn sẽ dẫn đến một hàng riêng biệt trong kết quả truy vấn. Một trong những biểu thức trong danh sách chọn này có dấu ngoặc đơn xung quanh nó, nhưng điều này sẽ không ảnh hưởng đến kết quả.