2011-08-30 38 views
9

Tôi có bảng transactions chứa một loại (category_id), một số tiền (amount) và cờ (managed) có thể đúng hoặc sai.Tổng kết có điều kiện trong PostgreSQL

Tôi muốn hiển thị danh sách tất cả các danh mục với tổng số lượng giao dịch được quản lý và không được quản lý, ví dụ:

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

Có cách nào để làm một cái gì đó giống như

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

Tôi rõ ràng là bị mắc kẹt trên một phần if managed is true ...

Trả lời

21

Thưởng thức!

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

ah! cảm ơn, tôi đã cố gắng 'trường hợp khi quản lý tổng (số tiền) kết thúc' nhưng nó là cách khác vòng: o) – Pierre

Các vấn đề liên quan