sql >> データベース >  >> RDS >> Mysql

PostgreSQL GROUP BYはMySQLとは異なりますか?

    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を生成するのは驚きではありません。



    1. データベースパフォーマンス監視設定のグレーディング

    2. SQLServerでテーブルのすべての依存関係を見つける方法

    3. oracle11gとHibernateSpringとjsfの統合

    4. OracleDatabaseのすべての関数を一覧表示します