columns mysql sum subquery

columns - MySQL-SUMs complicados dentro de la consulta



sum count mysql (2)

Esto va a ser difícil de explicar.

Estoy tbl_customers mis registros de clientes de tbl_customers varias veces al día.

SELECT c.* FROM tbl_customers c

Estoy devolviendo simplemente el cliente: customerid , name , phone , email

Ahora la parte extraña. Quiero agregar 3 columnas más, después del correo electrónico: totalpaid, totalowed, totalbalance PERO, esos nombres de columna no existen en ningún lado.

Aquí es cómo consulto cada uno: (como una sola consulta)

SELECT SUM(total) AS totalpaid FROM tbl_customers_bills WHERE customerid = X AND billtype = 1 SELECT SUM(total) AS totalowed FROM tbl_customers_bills WHERE customerid = X AND billtype = 2 SELECT SUM(total) AS totalbalance FROM tbl_customers_bills WHERE customerid = X AND billtype IN(1,2)

Entonces, el tipo de billtype es la columna que me dice si el registro se paga o no.

Estoy perdido aquí. ¿Cómo puedo SUM 3 consultas separadas en el ciclo de la primera consulta?


Puede hacer esto con una combinación de GROUP , SUM y IF

SELECT c.id, c.name, c.phone, c.email, SUM(IF(b.billtype = 1, b.total, 0)) AS totalpaid, SUM(IF(b.billtype = 2, b.total, 0)) AS totalowed, SUM(IF(b.billtype = 1 OR b.billtype = 2, b.total, 0)) AS totalbalance, FROM tbl_customers c LEFT JOIN tbl_customers_bills b ON b.customerid = c.id GROUP BY c.id

Ver: http://dev.mysql.com/doc/refman/5.0/en//group-by-functions.html http://dev.mysql.com/doc/refman/5.0/en/control-flow- functions.html


Simplemente únase a los clientes a las facturas y haga las sumas. Para separar el total pagado y el total, puede usar SUM(CASE o SUM(IF si la respuesta de wless1 demuestra

SELECT c.*, SUM(CASE WHEN billtype = 1 THEN total ELSE 0 END) totalpaid , SUM(CASE WHEN billtype = 2 THEN total ELSE 0 END) totalowed , SUM(total) AS totalbalance FROM tbl_customers c LEFT JOIN tbl_customers_bills b ON c.customerid = b.customerid and billtype in (1,2) GROUP BY c.customerid

Debido a que esto es MySQL, solo necesita agrupar en el PK del cliente.