sql >> Databáze >  >> RDS >> Mysql

PostgreSQL GROUP BY odlišná od MySQL?

MySQL zcela nevyhovující standardům GROUP BY lze emulovat Postgres' DISTINCT ON . Zvažte toto:

MySQL:

SELECT a,b,c,d,e FROM table GROUP BY a

To poskytuje 1 řádek na hodnotu a (který, to vlastně nevíte). Vlastně můžete hádat, protože MySQL nezná hashovací agregáty, takže pravděpodobně použije řazení... ale bude třídit pouze na a , takže pořadí řádků může být náhodné. Pokud nepoužívá místo řazení vícesloupcový index. No, každopádně to není specifikováno dotazem.

Postgres:

SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c

To poskytuje 1 řádek na hodnotu a , tento řádek bude první v řazení podle ORDER BY specifikované dotazem. Jednoduché.

Všimněte si, že zde nejde o agregát, který počítám. Takže GROUP BY vlastně nedává smysl. DISTINCT ON dává mnohem větší smysl.

Rails je ženatý s MySQL, takže mě nepřekvapuje, že generuje SQL, který v Postgresu nefunguje.



  1. Jak funguje SQLite Nullif()

  2. Vytváření nových modulů pomocí PostgreSQL Create Extension

  3. SQLite - Aktualizace dat

  4. Jak najít a nahradit text v databázi MySQL pomocí SQL