PostgreSQL中的条件求和

Pie*_*rre 9 postgresql ruby-on-rails-3

我有一个transactions表包含category(category_id),amount(amount)和flag(managed)可以是true或false.

我想显示所有类别的列表,其中包含托管和非托管交易的总金额,例如

Category | managed_transactions | unmanaged_transactions
Cat 1    |     124000           |     54000
Cat 2    |     4000             |     0
Cat 3    |     854000           |     1000000
Run Code Online (Sandbox Code Playgroud)

有没有办法做类似的事情

Select category_id,
       sum(amount) if (managed is true) as managed_transactions,
       sum(amount) if (managed is false) as unmanaged_transactions
from transactions
Run Code Online (Sandbox Code Playgroud)

我显然被困在了if managed is true......

Jul*_*eau 21

请享用!

SELECT
  category_id,
  SUM( CASE WHEN managed THEN amount ELSE      0 END ) AS managed_transactions,
  SUM( CASE WHEN managed THEN      0 ELSE amount END ) AS unmanaged_transactions
FROM
  transactions
GROUP BY
  category_id
ORDER BY
  category_id
Run Code Online (Sandbox Code Playgroud)