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

PostgreSQL-GROUP BY句に含めるか、集計関数で使用する必要があります

    user_idの場合 主キーです 次に、PostgreSQLをアップグレードする必要があります。新しいバージョンでは、主キーによるグループ化が正しく処理されます。

    user_idの場合 も一意ではありません 問題の「estates」関係の主キーの場合、PostgreSQLには を知る方法がないため、このクエリはあまり意味がありません。 estatesの各列に返される値 複数の行が同じuser_idを共有する場合 。 minのように、必要なものを表現する集計関数を使用する必要があります 、maxavgstring_aggarray_agg 、など、または目的の列をGROUP BYに追加します 。

    または、クエリを言い換えてDISTINCT ONを使用することもできます。 およびORDER BY 本当に任意の行を選択したい場合は、ActiveRecordを介してそれを表現できるかどうかは本当に疑わしいですが。

    SQLiteやMySQLを含む一部のデータベースは、任意の行を選択するだけです。これはPostgreSQLチームによって不正確で安全でないと見なされているため、PostgreSQLはSQL標準に従い、そのようなクエリをエラーと見なします。

    お持ちの場合:

    col1    col2
    fred    42
    bob     9
    fred    44
    fred    99
    

    そしてあなたは:

    SELECT col1, col2 FROM mytable GROUP BY col1;
    

    次に、行を取得する必要があることは明らかです:

    bob     9
    

    しかし、fredの結果はどうでしょうか ?選択する正しい答えは1つもないため、データベースはそのような安全でないクエリの実行を拒否します。 最高が必要な場合 col2 col1の場合 maxを使用します 集計:

    SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;
    


    1. フィールド名の周りにバッククォートを使用する

    2. MariaDBで日付に年を追加する6つの方法

    3. LEFTJOINは最初の行のみ

    4. より高速なデータベースのためのSQLVARCHARデータ型の推奨事項と禁止事項