MySQL zcela nevyhovující standardům GROUP BY
lze emulovat Postgres' DISTINCT ON
. Zvažte toto:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
To poskytuje 1 řádek na hodnotu a
(který, to vlastně nevíte). Vlastně můžete hádat, protože MySQL nezná hashovací agregáty, takže pravděpodobně použije řazení... ale bude třídit pouze na a
, takže pořadí řádků může být náhodné. Pokud nepoužívá místo řazení vícesloupcový index. No, každopádně to není specifikováno dotazem.
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
To poskytuje 1 řádek na hodnotu a
, tento řádek bude první v řazení podle ORDER BY
specifikované dotazem. Jednoduché.
Všimněte si, že zde nejde o agregát, který počítám. Takže GROUP BY
vlastně nedává smysl. DISTINCT ON
dává mnohem větší smysl.
Rails je ženatý s MySQL, takže mě nepřekvapuje, že generuje SQL, který v Postgresu nefunguje.