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.