sql >> Database >  >> RDS >> PostgreSQL

Hoe voorwaardelijk in een kolom te groeperen zonder FULL OUTER JOIN te gebruiken

Dit is een eenvoudige voorwaardelijke aggregatie voor zover ik weet:

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;

Als u een lege array wilt in plaats van een NULL waarde, wikkel de aggregatiefuncties in een 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. MariaDB POWER() uitgelegd

  2. Hoe kan ik bestellen door een aangepaste functie in SQLAlchemy

  3. Hoe php/MySQL COUNT (id) te debuggen, retourneert 1 in plaats van de totale invoerwaarde

  4. Records ophalen met JOIN-query