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

PostgreSQL GROUP BY forskellig fra MySQL?

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.



  1. SQL-server AlwaysOn-tilgængelighedsgrupper:Installation og konfiguration, del 2

  2. COUNT(*) fra flere tabeller i MySQL

  3. Hvilken SqlDbType knytter til varBinary(max)?

  4. Optælling baseret på tilstand i SQL Server