sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man villkorligt grupperar i kolumn utan att använda FULL YTTRE JOIN

Detta är en enkel villkorlig aggregering så vitt jag kan säga:

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;

Om du vill ha en tom array istället för en NULL värde, slå in aggregeringsfunktionerna i en 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. PostgreSQL-fråga för att byta namn och ändra kolumntyp med en enda fråga

  2. Hur man effektivt bestämmer ändringar mellan rader med SQL

  3. SQL-fråga som fungerar bra i SSMS går väldigt långsamt i ASP.NET

  4. SQLAlchemy och UnicodeDecodeError