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.