MySQL:s helt icke-standardkompatibla GROUP BY
kan emuleras av Postgres' DISTINCT ON
. Tänk på detta:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
Detta ger 1 rad per värde på a
(vilken vet du inte riktigt). Tja, du kan faktiskt gissa, eftersom MySQL inte känner till hashaggregat, så det kommer förmodligen att använda en sort... men det kommer bara att sortera på a
, så ordningen på raderna kan vara slumpmässig. Såvida den inte använder ett index med flera kolumner istället för att sortera. Nåväl, hur som helst, det specificeras inte av frågan.
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
Detta ger 1 rad per värde på a
, kommer den här raden att vara den första i sorteringen enligt ORDER BY
som anges av frågan. Enkelt.
Observera att här är det inte ett aggregat jag beräknar. Så GROUP BY
faktiskt ingen mening. DISTINCT ON
är mycket mer vettigt.
Rails är gift med MySQL, så jag är inte förvånad över att det genererar SQL som inte fungerar i Postgres.