MySQL è totalmente non conforme agli standard GROUP BY
può essere emulato da DISTINCT ON
di Postgres . Considera questo:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
Questo fornisce 1 riga per valore di a
(quale, non lo sai davvero). Bene, in realtà puoi indovinare, perché MySQL non conosce gli aggregati hash, quindi probabilmente utilizzerà un ordinamento ... ma ordinerà solo su a
, quindi l'ordine delle righe potrebbe essere casuale. A meno che non utilizzi un indice multicolonna invece dell'ordinamento. Bene, comunque, non è specificato dalla query.
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
Questo fornisce 1 riga per valore di a
, questa riga sarà la prima nell'ordinamento in base a ORDER BY
specificato dalla query. Semplice.
Nota che qui non è un aggregato che sto calcolando. Quindi GROUP BY
in realtà non ha senso. DISTINCT ON
ha molto più senso.
Rails è sposato con MySQL, quindi non sono sorpreso che generi SQL che non funziona in Postgres.