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

FULLOUTERJOINを使用せずに条件付きで列にグループ化する方法

    これは、私が知る限り、単純な条件付き集計です。

    select id, 
           array_agg(amount) filter (where type = 'Customer') as customer_array,
           sum(amount) filter (where type = 'Customer') as customer_sum,
           array_agg(amount) filter (where type = 'Partner') as partner_array,
           sum(amount) filter (where type = 'Partner') as partner_sum
    from table_a
    group by id;
    

    NULLの代わりに空の配列が必要な場合 値、集計関数をcoalesce()にラップします :

    select id, 
           coalesce((array_agg(amount) filter (where type = 'Customer')),'{}') as customer_array,
           coalesce((sum(amount) filter (where type = 'Customer')),0) as customer_sum,
           coalesce((array_agg(amount) filter (where type = 'Partner')),'{}') as partner_array,
           coalesce((sum(amount) filter (where type = 'Partner')),0) as partner_sum
    from table_a
    group by id;
    


    1. AppEngineからCloudSQLMySQLデータベースに接続するにはどうすればよいですか?

    2. MySQL#1140-GROUP列の混合

    3. MySQL char vs. int

    4. Oracleで結果を制限する方法