PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara mengelompokkan secara kondisional ke dalam kolom tanpa menggunakan FULL OUTER JOIN

Ini adalah agregasi bersyarat sederhana sejauh yang saya tahu:

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;

Jika Anda menginginkan array kosong alih-alih NULL value, bungkus fungsi agregasi menjadi 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghapus elemen array di PostgreSQL?

  2. Hibernasi Lambat untuk Memperoleh Koneksi Postgres

  3. Alat Hibernasi gagal mendapatkan info indeks dari tabel Postgres

  4. Heroku - bagaimana cara menarik data dari database ke database lokal?

  5. Indeks Unik di atas partisi postgresql