2011-08-30 35 views
9

için şartlı toplama Bir kategori (category_id), bir miktar (amount) ve bir bayrak (managed) içeren doğru veya yanlış bir transactions tablosum var.PostgreSQL

Tüm kategorilerin listesini, yönetilen ve yönetilmeyen işlemlerin toplam tutarları ile görüntülemek istiyorum.

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

gibi bir şey

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

Açıkçası if managed is true parçası üzerinde şaşırıp yapmanın bir yolu var mı ...

cevap

21

tadını çıkarın!

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! Teşekkürler, ben (toplam) tutarı yönetilen durumda denedim ama diğer yol yuvarlak oldu: o) – Pierre