Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/02/2014, 06:34
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: duda con alias y sum

Cita:
Iniciado por glome Ver Mensaje
Buenos dias

Tengo dos tablas y necesito calcular de cada cliente la suma de importes y la suma de lo pagado de las consultas y la deuda restando ambas, pero que solo me muestre aquellos registros cuya deuda sea mayor de 1.

He conseguido todo menos que si es mayor que 1 la muestre. Y ese filtro lo hago por php, pero como hay muchos registros tarda demasiado.

Podríais revisar mi consulta por si hay alguna otra forma de conseguir ese resultado?

Código SQL:
Ver original
  1. SELECT cl.id_cliente, `nombre` , `apellidos` , `fijo` , `movil` , SUM( importe ) AS 'suma_importe',
  2. SUM( importe_pagado ) AS 'suma_pagado', SUM( importe - importe_pagado ) AS pendiente
  3. FROM `clientes` AS cl, consultas AS c
  4. WHERE cl.id_cliente= c.id_cliente
  5. GROUP BY id_cliente

He probado añadiendo al where lo siguiente, pero no hace nada
Código SQL:
Ver original
  1. AND 'pendiente'>1
Gracias
Por empezar: No puedes usar los alias del SELECT en su WHERE. Es una regla universal de todos los DMS y no sólo de MySQL.
Segundo: Esto tiene un error grave
Código SQL:
Ver original
  1. AND 'pendiente'>1
estás comparando la cadena de texto "pendiente" con el número 1...

Tu problema tiene varias soluciones, pero esta posiblemente sea la más simple:
Código SQL:
Ver original
  1. SELECT
  2.     cl.id_cliente,
  3.     `nombre` ,
  4.     `apellidos` ,
  5.     `fijo` ,
  6.     `movil` ,
  7.     SUM(importe ) suma_importe,
  8.     SUM(importe_pagado ) suma_pagado,
  9.     SUM(importe - importe_pagado ) pendiente
  10. FROM `clientes` cl INNER JOIN consultas c ON cl.id_cliente= c.id_cliente
  11. GROUP BY id_cliente
  12. HAVING SUM(importe - importe_pagado ) > 1
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)