Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PostgreSQL GROUP BY anders als MySQL?

MySQLs völlig nicht standardkonformes GROUP BY kann von Postgres' DISTINCT ON emuliert werden . Bedenken Sie Folgendes:

MySQL:

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

Dies liefert 1 Zeile pro Wert von a (welches, du weißt es nicht wirklich). Nun, eigentlich können Sie es sich denken, weil MySQL nichts über Hash-Aggregate weiß, also wird es wahrscheinlich eine Sortierung verwenden ... aber es wird nur nach a sortiert , sodass die Reihenfolge der Zeilen zufällig sein könnte. Es sei denn, es wird ein mehrspaltiger Index anstelle einer Sortierung verwendet. Jedenfalls wird es nicht von der Abfrage angegeben.

Postgres:

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

Dies liefert 1 Zeile pro Wert von a , ist diese Zeile die erste in der Sortierung nach ORDER BY durch die Abfrage angegeben. Einfach.

Beachten Sie, dass ich hier kein Aggregat berechne. Also GROUP BY macht eigentlich keinen sinn. DISTINCT ON macht viel mehr Sinn.

Rails ist mit MySQL verheiratet, daher überrascht es mich nicht, dass es SQL generiert, das in Postgres nicht funktioniert.