MySQL's fuldstændig ikke-standard-kompatible GROUP BY
kan emuleres af Postgres' DISTINCT ON
. Overvej dette:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
Dette giver 1 række pr. værdi af a
(hvilken ved du ikke rigtig). Faktisk kan du gætte, fordi MySQL ikke kender til hash-aggregater, så det vil sandsynligvis bruge en sortering... men det vil kun sortere på a
, så rækkefølgen af rækkerne kunne være tilfældig. Medmindre den bruger et indeks med flere kolonner i stedet for at sortere. Nå, i hvert fald er det ikke specificeret af forespørgslen.
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
Dette giver 1 række pr. værdi af a
, vil denne række være den første i sorteringen i henhold til ORDER BY
angivet af forespørgslen. Simpelt.
Bemærk, at her er det ikke et aggregat, jeg beregner. Så GROUP BY
giver faktisk ingen mening. DISTINCT ON
giver meget mere mening.
Rails er gift med MySQL, så jeg er ikke overrasket over, at det genererer SQL, der ikke virker i Postgres.