2011-08-30 3 views
9

카테고리 (category_id), 금액 (amount) 및 플래그 (managed)가 true 또는 false 일 수있는 transactions 테이블이 있습니다.PostgreSQL의 조건부 합계

모든 관리 목록과 관리되지 않는 관리 된 거래 (예 :

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 부분에 붙어있어 할 수있는 방법이 있나요 ...

답변

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 
+0

아! 고마워, 나는'관리 총액 (금액) 끝 '경우를 시도했지만 반대 방향으로 : o) – Pierre