PostgreSQL hiện không cho phép GROUP BY
không rõ ràng các câu lệnh trong đó kết quả phụ thuộc vào thứ tự quét bảng, kế hoạch được sử dụng, v.v. Đó là cách tiêu chuẩn nói rằng nó sẽ hoạt động AFAIK, nhưng một số cơ sở dữ liệu (như phiên bản MySQL trước 5.7) cho phép truy vấn lỏng lẻo chỉ chọn giá trị đầu tiên gặp phải đối với các phần tử xuất hiện trong SELECT
danh sách nhưng không có trong GROUP BY
.
Trong PostgreSQL, bạn nên sử dụng DISTINCT ON
cho loại truy vấn này.
Bạn muốn viết một cái gì đó như:
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(Cú pháp được sửa chữa dựa trên nhận xét tiếp theo)
Điều này hơi giống với ANY_VALUE(...)
của MySQL 5.7 chức năng giả cho nhóm group by
, nhưng ngược lại - nó nói rằng các giá trị trong distinct on
mệnh đề phải là duy nhất và bất kỳ giá trị nào cũng được chấp nhận cho các cột không được chỉ định.
Trừ khi có ORDER BY
, không có người bảo đảm về giá trị nào được chọn. Bạn thường phải có ORDER BY
để có thể dự đoán.
Người ta cũng lưu ý rằng việc sử dụng tổng hợp như min()
hoặc max()
sẽ hoạt động. Mặc dù điều này đúng - và sẽ dẫn đến kết quả đáng tin cậy và có thể dự đoán được, không giống như việc sử dụng DISTINCT ON
hoặc GROUP BY
tham vọng - nó có chi phí hiệu suất do cần phải sắp xếp hoặc tổng hợp thêm và nó chỉ hoạt động đối với các kiểu dữ liệu thứ tự.