sql >> Databasteknik >  >> RDS >> Mysql

PostgreSQL GROUP BY skiljer sig från MySQL?

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.



  1. Hur hanterar man db-anslutningar på servern?

  2. välj rownum från lön där rownum=3;

  3. PostgreSQL FEL:funktion to_tsvector (tecken varierar, okänt) finns inte

  4. Ett prestationsfuskblad för PostgreSQL