PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak warunkowo grupować w kolumnę bez użycia FULL OUTER JOIN

O ile wiem, to jest prosta agregacja warunkowa:

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;

Jeśli chcesz pustą tablicę zamiast NULL wartość, zapakuj funkcje agregacji w 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. Aby zignorować wynik w BEFORE TRIGGER PostgreSQL?

  2. Postgresql SELECT, jeśli ciąg zawiera

  3. Jak uzyskać wyzwalacze powiązane z widokiem lub tabelą w PostgreSQL?

  4. GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server?

  5. Zapytania SQL Sub w ograniczeniu sprawdzającym