MySQLの完全に非標準準拠のGROUP BY
PostgresのDISTINCT ON
でエミュレートできます 。これを考慮してください:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
これにより、a
の値ごとに1行が配信されます (どれ、あなたは本当に知りません)。 MySQLはハッシュ集計を認識していないため、実際には推測できます。おそらくソートを使用します...ただし、a
でのみソートされます。 、したがって、行の順序はランダムである可能性があります。並べ替えの代わりに複数列のインデックスを使用しない限り。まあ、とにかく、それはクエリによって指定されていません。
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
これにより、a
の値ごとに1行が配信されます 、この行は、ORDER BY
に従って並べ替えられた最初の行になります クエリで指定されます。シンプル。
ここでは、私が計算している集計ではないことに注意してください。したがって、GROUP BY
実際には意味がありません。 DISTINCT ON
はるかに理にかなっています。
RailsはMySQLと結婚しているので、Postgresで機能しないSQLを生成するのは驚きではありません。