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

PostgreSQL 9.1:重複せずに配列内の行を連結する方法、別のテーブルに参加する

    ウィンドウ関数とパティションを使用する代わりに、クエリレベルのGROUP BYを使用し、DISTINCT句を使用して集計します。

    SELECT         
      rnp.grp_id,
      array_to_string(array_agg(distinct rnp.cabinets),',') AS cabinets,
      array_to_string(array_agg(distinct ips.address),',')  AS addresses
    FROM rnp JOIN ips ON rnp.grp_id=ips.grp_id GROUP BY rnp.grp_id, ips.grp_id;
    

    結果:

     grp_id |        cabinets         | addresses 
    --------+-------------------------+-----------
         11 | cabs1,cabs2,cabs3,cabs4 | CA,NY
         22 | c1,c2                   | DC,LA
    (2 rows)
    

    ここで重要なのは、ウィンドウ関数とパティションを使用する代わりに、クエリレベルのGROUP BYを使用することです。 DISTINCTで集計します 条項。

    これは、PostgreSQL(少なくとも9.1)がDISTINCTをサポートしていないことを除いて、ウィンドウ関数アプローチでも機能します。 ウィンドウ関数内:

    regress=# SELECT DISTINCT
      rnp.grp_id,
      array_to_string(array_agg(distinct rnp.cabinets)OVER (PARTITION BY rnp.grp_id), ',') AS cabinets,                    
      array_to_string(array_agg(distinct ips.address) OVER (PARTITION BY ips.grp_id), ',') AS addresses
    FROM rnp JOIN ips ON rnp.grp_id=ips.grp_id;
    ERROR:  DISTINCT is not implemented for window functions
    LINE 3:   array_to_string(array_agg(distinct rnp.cabinets)OVER (PART...
    



    1. インデックスが配列の範囲外だった。 (Microsoft.SqlServer.smo)

    2. 1で始まるように、1次元配列の配列添え字を正規化します。

    3. phpPgAdminからのPostgressql挿入クエリ構文エラー

    4. PHPでUnicodeデータを表示する方法