Pregunta Sumisión condicional en PostgreSQL


tengo un transactions tabla que contiene una categoría (category_id), una cantidad (amount) y una bandera (managed) que puede ser verdadero o falso.

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

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

¿Hay alguna 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 atrapado en el if managed is true parte...


9
2017-08-30 17:20


origen


Respuestas:


¡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

21
2017-08-30 17:31