Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PostgreSQL GROUP BY diferente do MySQL?


MySQL totalmente não compatível com os padrões GROUP BY pode ser emulado pelo DISTINCT ON do Postgres . Considere isto:

MySQL:

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

Isso fornece 1 linha por valor de a (qual, você realmente não sabe). Bem, na verdade, você pode adivinhar, porque o MySQL não sabe sobre agregados de hash, então provavelmente usará uma classificação ... mas apenas classificará em a , então a ordem das linhas pode ser aleatória. A menos que use um índice de várias colunas em vez de classificação. Bem, de qualquer forma, não é especificado pela consulta.

Postgres:

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

Isso fornece 1 linha por valor de a , esta linha será a primeira na classificação de acordo com o ORDER BY especificado pela consulta. Simples.

Observe que aqui, não é um agregado que estou computando. Então GROUP BY na verdade não faz sentido. DISTINCT ON faz muito mais sentido.

Rails é casado com MySQL, então não estou surpreso que ele gere SQL que não funciona no Postgres.