Mysql
 sql >> Database >  >> RDS >> Mysql

PostgreSQL GROUP BY diverso da MySQL?

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.