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

GroupingError:ERROR:列はGROUP BY句に表示されるか、集計関数で使用される必要があります

    SELECT *を組み合わせることはできません GROUP BY some_columnを使用 Postgresで(some_columnを除く PK)、それは矛盾しているからです。集計されていないすべての列(SELECTで使用) 、HAVING またはORDER BY 集計関数の外側の句)は、GROUP BYに含まれている必要があります list-主キー列がテーブルのすべての列を置き換えることができる場所。それ以外の場合は未定義です 集約されたセットから選択する値。

    ドキュメントごと:

    GROUP BYの場合 が存在するか、集計関数が存在する場合、SELECTには無効です。 集計関数内を除いて、またはグループ化されていない列が機能的にグループ化された列に依存している場合を除いて、グループ化されていない列を参照する式をリストします。グループ化された列(またはそのサブセット)が、グループ化されていない列を含むテーブルの主キーである場合、機能依存性が存在します。

    他の特定のRDBMSは、ここでダーティトリックを実行し、これを許可して任意の値を選択することが知られています...

    最新でコメントしたユニークな患者のリストが必要なようです それぞれコメントします。 Postgresで最も簡単な方法は、DISTINCT ONを使用することです。 :

    SELECT DISTINCT ON (patient_id) *
    FROM   comments
    WHERE  clinician_id = $1
    ORDER  BY patient_id, created_at DESC NULLS LAST;
    

    しかし、これはSQLiteではうまくいきません-そもそもループに入ってはいけません:

    • SQLite3「LIKE」またはPostgreSQL「ILIKE」用の汎用Rubyソリューション?

    NULLS LAST created_atの場合にのみ関連します NULLにすることができます:

    • PostgreSQLは日時ascで並べ替え、最初はnullですか?

    DISTINCT ONの詳細 :

    • 各GROUPBYグループの最初の行を選択しますか?



    1. ASP.NetでのSQLインジェクションの防止

    2. 例を使用して説明されたSQLDROPインデックス、DROPテーブル、およびDROPデータベースステートメント

    3. OracleCloudInfrastructureのコンパートメントについて知っておくべき7つのこと

    4. SQLServerで数値を小数点以下2桁にフォーマットする4つの関数