Tôi đang cố gắng để thêm tính năng để một ứng dụng từ trước và tôi đi qua một cái nhìn một cái gì đó MySQL như thế này:MySQL - Lựa chọn một cột không trong Nhóm By
SELECT
AVG(table_name.col1),
AVG(table_name.col2),
AVG(table_name.col3),
table_name.personID,
table_name.col4
FROM table_name
GROUP BY table_name.personID;
OK vì vậy có một vài chức năng tổng hợp. Bạn có thể chọn personID vì bạn đang nhóm theo nó. Nhưng nó cũng đang chọn một cột không có trong hàm tổng hợp và không phải là một phần của mệnh đề GROUP BY. Sao có thể như thế được??? Liệu nó chỉ chọn một giá trị ngẫu nhiên bởi vì các giá trị chắc chắn không phải là duy nhất cho mỗi nhóm?
Tôi đến từ đâu (Máy chủ MSSQL), đó là lỗi. Ai đó có thể giải thích hành vi này với tôi và tại sao nó được cho phép trong MySQL?
Tôi muốn nhận xét rằng điều này không hoàn toàn đúng. Trong số các trường được lựa chọn ANSI SQL-99 phải là tổng hợp, phụ thuộc vào hàm theo mệnh đề nhóm. Vì vậy, việc chọn user_name khi nhóm theo user_id hoàn toàn ổn. SQL Server và Oracle không tuân thủ điều này, bởi vì họ sẽ không cho phép user_name được chọn khi chỉ user_id nằm trong nhóm theo danh sách; và MySQL không tuân thủ, bởi vì nó không kiểm tra xem mỗi cột được chọn có thực sự phụ thuộc vào chức năng trên user_id hay không. –
@ThorstenKettner, cảm ơn, bạn đã chính xác. MySQL 5.7 đã được cải thiện và nó thông minh hơn nhiều trong trường hợp hỗ trợ ANSI SQL. –