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

グループ化/集約中に配列値を連結/マージします

    カスタム集計

    アプローチ1:カスタム集計を定義します。これが私が以前に書いたものです。

    CREATE TABLE my_test(title text, tags text[]);
    
    INSERT INTO my_test(title, tags) VALUES
    ('ridealong', '{comedy,other}'),
    ('ridealong', '{comedy,tragedy}'),
    ('freddyjason', '{horror,silliness}');
    
    CREATE AGGREGATE array_cat_agg(anyarray) (
      SFUNC=array_cat,
      STYPE=anyarray
    );
    
    select title, array_cat_agg(tags) from my_test group by title;
    

    LATERALクエリ

    ...または、順序を保持したくないので重複排除したいので、LATERALを使用できます。 次のようなクエリ:

    SELECT title, array_agg(DISTINCT tag ORDER BY tag) 
    FROM my_test, unnest(tags) tag 
    GROUP BY title;
    

    この場合、カスタムアグリゲートは必要ありません。これは、重複排除のため、ビッグデータセットではおそらくかなり遅くなります。 ORDER BYを削除する ただし、必要がない場合は役立つ場合があります。



    1. ClusterControl1.8.2の新しいユーザーとLDAP管理

    2. Mysqlは列を分割できますか?

    3. Postgresqlに任意の長さの文字列を保存します

    4. SQLServerの一時テーブルのスコープ