MySQL hoàn toàn không tuân thủ tiêu chuẩn GROUP BY
có thể được mô phỏng bởi Postgres 'DISTINCT ON
. Hãy xem xét điều này:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
Điều này phân phối 1 hàng cho mỗi giá trị của a
(cái nào, bạn không thực sự biết). Thực ra thì bạn cũng có thể đoán được, bởi vì MySQL không biết về tổng hợp băm, vì vậy nó có thể sẽ sử dụng một loại ... nhưng nó sẽ chỉ sắp xếp trên a
, vì vậy thứ tự của các hàng có thể là ngẫu nhiên. Trừ khi nó sử dụng chỉ mục đa cột thay vì sắp xếp. Chà, dù sao, nó không được chỉ định bởi truy vấn.
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
Điều này phân phối 1 hàng cho mỗi giá trị của a
, hàng này sẽ là hàng đầu tiên trong loại theo ORDER BY
được chỉ định bởi truy vấn. Đơn giản.
Lưu ý rằng ở đây, nó không phải là tổng hợp mà tôi đang tính toán. Vì vậy, GROUP BY
thực sự không có ý nghĩa. DISTINCT ON
có ý nghĩa hơn rất nhiều.
Rails đã kết hôn với MySQL, vì vậy tôi không ngạc nhiên khi nó tạo ra SQL không hoạt động trong Postgres.