2011-08-30 16 views
9

Tengo una tabla transactions que contiene una categoría (category_id), una cantidad (amount) y una marca (managed) que puede ser verdadera o falsa.Sumisión condicional en PostgreSQL

Me gustaría mostrar una lista de todas las categorías con los importes totales de las transacciones gestionadas y no gestionadas, p.

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

¿Hay una manera de hacer algo como

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

Obviamente estoy atascado en la parte if managed is true ...

Respuesta

21

disfrutar!

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! gracias, había intentado 'case when managed sum (amount) end' pero fue al revés: o) – Pierre