sql >> Base de Datos >  >> RDS >> Mysql

GRUPO PostgreSQL POR diferente de MySQL?

MySQL no cumple con los estándares GROUP BY puede ser emulado por DISTINCT ON de Postgres . Considere esto:

MySQL:

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

Esto entrega 1 fila por valor de a (cuál, realmente no lo sabes). Bueno, en realidad puedes adivinar, porque MySQL no conoce los agregados de hash, por lo que probablemente usará una ordenación... pero solo ordenará en a , por lo que el orden de las filas podría ser aleatorio. A menos que use un índice de varias columnas en lugar de ordenar. Bueno, de todos modos, no está especificado por la consulta.

Postgres:

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

Esto entrega 1 fila por valor de a , esta fila será la primera en el orden según el ORDER BY especificado por la consulta. Sencillo.

Tenga en cuenta que aquí, no es un agregado lo que estoy calculando. Así que GROUP BY en realidad no tiene sentido. DISTINCT ON tiene mucho más sentido.

Rails está casado con MySQL, por lo que no me sorprende que genere SQL que no funciona en Postgres.