MySQL - Consulta MySQL con suma en WHERE

 
Vista:

Consulta MySQL con suma en WHERE

Publicado por Leonardo (1 intervención) el 04/06/2007 17:09:02
Estimados, estoy con un problema que no se resolver mediante MySQL y por eso acudo a su ayuda...

Estoy necesitando generar una consulta, el SQL CREO tenerlo bien, pero sin embargo me salen errores y no trabaja como quiero.

El SQL es el siguiente:

SELECT
tbl_clientes.apellido,
tbl_clientes.nombre,
tbl_clientes.email1,
tbl_clientes.usuario,
tbl_clientes.id,
tbl_pagos.importe,
tbl_facturas.importe
FROM
tbl_clientes
RIGHT OUTER JOIN tbl_facturas ON (tbl_clientes.id = tbl_facturas.idCliente)
RIGHT OUTER JOIN tbl_pagos ON (tbl_clientes.id = tbl_pagos.idCliente)
WHERE
(SUM(tbl_pagos.importe) - SUM(tbl_facturas.importe) > 0)

Basicamente lo que quiero obtener con el SQL es la lista de todos los clientes donde la SUMA de todos sus pagos - la suma de todas sus facturas sean
mayores a cero.

Sera complicado llegar a esto?

Espero que puedan ayudarme. Desde ya muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consulta MySQL con suma en WHERE

Publicado por kain (124 intervenciones) el 04/06/2007 22:10:25
haber si te funciona como quieres de esta manera.
SELECT
tbl_clientes.apellido,
tbl_clientes.nombre,
tbl_clientes.email1,
tbl_clientes.usuario,
tbl_clientes.id,
tbl_pagos.importe,
tbl_facturas.importe
FROM
tbl_clientes
WHERE
((select SUM(tbl_facturas.importe) from tbl_facturas where tbl_clientes.id = tbl_facturas.idCliente) - (select SUM(tbl_pagos.importe) from tbl_pagos where tbl_clientes.id = tbl_pagos.idCliente))>0

de cualquier manera yo optaria por crea una par de funciones que me calculen el total factura y el total pagos realizados, por supuesto solo si usas mysql 5.x
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta MySQL con suma en WHERE

Publicado por Carlos (5 intervenciones) el 07/06/2007 00:35:07
Veo que pierdes mas tiempo en tu cruzada contra Windows y ODBC que estudiando álgebra relacional. Tu consulta no funcionaría jamás. Estudia y no pierdas tanto tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta MySQL con suma en WHERE

Publicado por Carlos (5 intervenciones) el 07/06/2007 01:20:45
Hola.
No podrá funcionar bien debido a que estas haciendo una selección de todas las facturas con los datos de sus clientes y luego estas intentando seleccionar en la cláusula WERE una condición que nada tiene que ver.
Yo haría lo siguiente:

Suprimir pagos.importe y facturas.importe ya que en la selección son datos agrupados y siempre te generará error. Además, por lo que me has indicado solo te interesa saber los datos del cliente, no de cada factura.

Hacer una subselección de facturas que cumplan con la condición, de la que obtengo las claves foráneas de los clientes que me interesan:

SELECT
tbl_clientes.apellido,
tbl_clientes.nombre,
tbl_clientes.email1,
tbl_clientes.usuario,
tbl_clientes.id
FROM
tbl_clientes
WHERE tbl_clientes.id IN
(SELECT DISTINCT tbl_facturas.idCliente FROM tbl_facturas
WHERE
(SELECT SUM(tf.importe) FROM tbl_facturas AS tf
WHERE tbl_clientes.id = tf.idCliente) > SELECT (SUM(tp.importe) FROM tbl_pagos AS tp
WHERE tbl_clientes.id = tp.idCliente)))

No se si me dejo algún paréntesis o alguna falta de "ortografía", pero te debería funcionar correctamente, almenos la idea. No se si MySQL soporta varios grados de subselección.

SELECT SUM(tbl_facturas.importe) FROM tbl_facturas
WHERE idCliente = id = SELECT idCliente FROM tbl_pagos WHERE
(tbl_pagos.importe) - SUM(tbl_facturas.importe) > 0)
RIGHT OUTER JOIN tbl_facturas ON (tbl_clientes.id = tbl_facturas.idCliente)
RIGHT OUTER JOIN tbl_pagos ON (tbl_clientes.id = tbl_pagos.idCliente)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar