Mysql
 sql >> Base de données >  >> RDS >> Mysql

PostgreSQL GROUP BY différent de MySQL ?

Le GROUP BY totalement non conforme aux normes de MySQL peut être émulé par DISTINCT ON de Postgres . Considérez ceci :

MySQL :

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

Cela fournit 1 ligne par valeur de a (lequel, vous ne savez pas vraiment). Eh bien, en fait, vous pouvez deviner, car MySQL ne connaît pas les agrégats de hachage, il utilisera donc probablement un tri ... mais il ne triera que sur a , l'ordre des lignes peut donc être aléatoire. Sauf s'il utilise un index multicolonne au lieu de trier. Eh bien, de toute façon, ce n'est pas spécifié par la requête.

Postgres :

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

Cela fournit 1 ligne par valeur de a , cette ligne sera la première du tri selon le ORDER BY spécifié par la requête. Simple.

Notez qu'ici, ce n'est pas un agrégat que je calcule. Donc GROUP BY n'a en fait aucun sens. DISTINCT ON a beaucoup plus de sens.

Rails est marié à MySQL, donc je ne suis pas surpris qu'il génère du SQL qui ne fonctionne pas dans Postgres.