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

1つの列の複数の結果行を1つに連結し、別の列でグループ化します

    集計関数string_agg()を使用すると簡単になります (Postgres 9.0以降):

    SELECT movie, string_agg(actor, ', ') AS actor_list
    FROM   tbl
    GROUP  BY 1;
    

    1 GROUP BY 1GROUP BY movieの位置参照およびショートカットです。 この場合。

    string_agg() データ型textが必要です 入力として。他のタイプは明示的にキャストする必要があります(actor::text )-でない限り textへの暗黙のキャスト 定義されています-これは他のすべての文字タイプ(varcharの場合)です。 、character"char" )、および他のいくつかのタイプ。

    isapirがコメントしたように、ORDER BYを追加できます ソートされたリストを取得するための集約呼び出しの句-必要な場合。いいね:

    SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
    FROM   tbl
    GROUP  BY 1;

    ただし、通常、サブクエリで行を並べ替える方が高速です。参照:

    • PostgresSQL-Selectでアレイを作成


    1. 演算子間のSQL

    2. 動的フィールド名でトリガー

    3. RHEL、Rocky、AlmaLinuxでMySQLレプリケーションを設定する方法

    4. 既存のデータベースの異なるバージョンを管理するために使用できる方法はどれですか?