Całkowicie niezgodny ze standardami MySQL GROUP BY może być emulowany przez DISTINCT ON Postgresa . Rozważ to:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
To dostarcza 1 wiersz na wartość a (który, tak naprawdę nie wiesz). Cóż, właściwie można się domyślać, ponieważ MySQL nie wie o agregacjach hash, więc prawdopodobnie użyje sortowania... ale będzie sortować tylko według a , więc kolejność wierszy może być losowa. Chyba że używa indeksu wielokolumnowego zamiast sortowania. Cóż, w każdym razie nie jest to określone w zapytaniu.
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
To dostarcza 1 wiersz na wartość a , ten wiersz będzie pierwszym w sortowaniu zgodnie z ORDER BY określone w zapytaniu. Proste.
Zauważ, że tutaj nie obliczam agregatu. Więc GROUP BY właściwie nie ma sensu. DISTINCT ON ma o wiele więcej sensu.
Railsy są powiązane z MySQL, więc nie dziwię się, że generuje SQL, który nie działa w Postgresie.