2012-01-04 20 views
25

Estoy creando una consulta para un informe con múltiples condiciones IF en la SUMA. Tengo problemas con múltiples condiciones de IF en SUM.Consulta de sumas MYSQL con IF Condición

Ésta es la consulta:

SELECT SUM(`totalamount`) AS Total, 
SUM(`PayPalFee`) AS Fees, 
DATE(`TransactionDate`) AS `Day`, 
SUM(IF(PaymentType = "paypal", 1,0)) AS Paypal, 
SUM(IF(PaymentType = "check", 1,0)) AS Checks, 
SUM(IF(PaymentType = "credit card", 1,0)) AS CreditCard, 
COUNT(*) AS Entries 
FROM my_table 
WHERE TransactionDate between '2011-05-05' AND '2012-01-30' 
GROUP BY day 
ORDER BY `day` ASC 

Esta consulta funciona bien.

Cuando trato de agregar la instrucción SUMA continuación condicional:

SUM('TotalAmount'(PaymentType = "credit card", 1,0)) AS CreditCardTotal, 

Esta instrucción condicional IF falla a cabo.

Tengo una columna llamada 'TotalAmount' y una columna llamada 'PaymentType' Estoy buscando crear una SUMA de las transacciones de la tarjeta de crédito por cada día, una SUMA de las transacciones de cheques por cada día, una SUMA del paypal transacciones por cada día ,. He intentado crear una subconsulta, pero esto devuelve un valor para toda la columna TotalAmount, no desglosado por día.

Respuesta

62

Probar con un CASE de esta manera:

SUM(CASE WHEN PaymentType = "credit card" THEN TotalAmount ELSE 0 END) AS CreditCardTotal, 

debe dar según lo que busca ...

+0

Impresionante! Gracias, no puedo aceptar esto todavía, pero lo haré. –

+0

@aleroot ¿hay alguna diferencia entre 'SUMA (CASO CUANDO .. ENTONCES .. ELLA .. FIN)' y 'SUMA (SI (.., .., ..))' cuando me gustaría verificar solo una condición (si algún campo booleano es 1)? Quiero decir, ¿cuál debería ser más rápido? – NHG

+1

Podría hacerse como si, por ejemplo: 'SUMA (IF (PaymentType =" tarjeta de crédito ", TotalAmount, 0) AS CreditCardTotal,' – George

34

¿Qué tal esto?

SUM(IF(PaymentType = "credit card", totalamount, 0)) AS CreditCardTotal