Nếu user_id
là CHÌA KHÓA CHÍNH thì bạn cần nâng cấp PostgreSQL; các phiên bản mới hơn sẽ xử lý chính xác việc nhóm theo khóa chính.
Nếu user_id
không phải là duy nhất cũng không phải khóa chính cho mối quan hệ 'bất động sản' được đề cập, thì truy vấn này không có ý nghĩa nhiều, vì PostgreSQL không có cách nào để biết cái nào giá trị trả về cho mỗi cột của estates
trong đó nhiều hàng chia sẻ cùng một user_id
. Bạn phải sử dụng một hàm tổng hợp thể hiện những gì bạn muốn, chẳng hạn như min
, max
, avg
, string_agg
, array_agg
, v.v. hoặc thêm (các) cột quan tâm vào GROUP BY
.
Ngoài ra, bạn có thể đặt lại cụm từ truy vấn để sử dụng DISTINCT ON
và một ORDER BY
nếu bạn thực sự muốn chọn một hàng hơi tùy ý, mặc dù tôi thực sự nghi ngờ rằng có thể thể hiện điều đó qua ActiveRecord.
Một số cơ sở dữ liệu - bao gồm SQLite và MySQL - sẽ chỉ chọn một hàng tùy ý. Điều này được nhóm PostgreSQL coi là không chính xác và không an toàn, vì vậy PostgreSQL tuân theo tiêu chuẩn SQL và coi các truy vấn như vậy là lỗi.
Nếu bạn có:
col1 col2
fred 42
bob 9
fred 44
fred 99
và bạn làm:
SELECT col1, col2 FROM mytable GROUP BY col1;
thì rõ ràng là bạn nên lấy hàng:
bob 9
nhưng kết quả cho fred
thì sao ? Không có câu trả lời đúng duy nhất để chọn, vì vậy cơ sở dữ liệu sẽ từ chối thực hiện các truy vấn không an toàn như vậy. Nếu bạn muốn điều tuyệt vời nhất col2
cho bất kỳ col1
nào bạn sẽ sử dụng max
tổng hợp:
SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;