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

Postgres:GROUP BYとORDERの使用中にエラーが発生しました(herokuで)

    差し迫った問題は、PostgreSQLに対して無効なSQLを生成していることです:

    SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC
    

    ORDERBYが残りのクエリと一致しません。グループ化されたクエリで列を使用することはできません。ただし、その列もグループ化されていない場合、または列が集計関数に表示されている場合は、エラーメッセージの意味です。その理由は、PostgreSQLがどの行のcreated_atを認識しないためです。 行のグループがGROUPBY句によって結合されるときに使用します。一部のデータベースは、それ自体で静かに行を選択します。PostgreSQLは厳密を優先し、あいまいさを自分で取り除くことを望んでいます。

    自分で順序を指定してみてください:

    @categories = Micropost.select("category").group("category").order("category")
    

    もう1つのオプションは、DISTINCT を使用することです。 重複を避けるためにGROUPBYの代わりに:

    @categories = Micropost.select('DISTINCT(category)')
    

    ところで、ビューでそのようなことをするべきではありません。それをコントローラーに移動することをお勧めします。

    あなたの本当の問題は、別のデータベースにデプロイしながら、あるデータベースの上で開発していることです。開発環境をPostgreSQL8.3(Heroku共有データベースにデプロイする場合)またはPostgreSQL 9.0(専用データベースにデプロイする場合)に切り替えることをお勧めします。



    1. アマゾンRDSからローカルmysqlに巨大なデータベースをエクスポートする

    2. PL/SQLオンラインMCQクイズ

    3. AccessでSQLServerを使用する必要があるのはいつですか。 (ヒント:ほとんどの場合)

    4. SSIS パッケージ内でエラー ログまたはカスタム エラー ログを作成する方法は?