Условное суммирование в PostgreSQL - PullRequest
9 голосов
/ 30 августа 2011

У меня есть таблица transactions, которая содержит категорию (category_id), сумму (amount) и флаг (managed), который может быть истинным или ложным.

Я хотел бы отобразить список всех категорий с общей суммой управляемых и неуправляемых транзакций, например,

Category | managed_transactions | unmanaged_transactions
Cat 1    |     124000           |     54000
Cat 2    |     4000             |     0
Cat 3    |     854000           |     1000000

Есть ли способ сделать что-то вроде

Select category_id,
       sum(amount) if (managed is true) as managed_transactions,
       sum(amount) if (managed is false) as unmanaged_transactions
from transactions

Я явно застрял на if managed is true части ...

1 Ответ

21 голосов
/ 30 августа 2011

Наслаждайтесь!

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...