Ver Mensaje Individual
  #8 (permalink)  
Antiguo 05/08/2011, 20:31
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Se puede mejorar esta consulta.

Mira, creo que debe haber un error de interpretación.
Dados los datos que muestras en esa tabla, y las condiciones puestas en esa primera consulta, no existe forma en que la suma te de 133.000.
Según lo que nos dices, la tabla contiene esto:
Código MySQL:
Ver original
  1. mysql> SELECT * FROM `test`.`alquiler`;
  2. +------------+------------+---------+-------------+-------+-------+---------+
  3. | idalquiler | fentrada   | entrega | consumicion | saldo | total | estado  |
  4. +------------+------------+---------+-------------+-------+-------+---------+
  5. |          1 | 2011-08-04 |       0 |           0 | 20000 | 20000 | DEBE    |
  6. |          2 | 2011-08-04 |   35000 |           0 | 15000 | 50000 | DEBE    |
  7. |          3 | 2011-08-04 |   10000 |       13000 | 20000 | 43000 | DEBE    |
  8. |          4 | 2011-08-04 |   20000 |       13000 | 10000 | 43000 | PAGADO  |
  9. |          5 | 2011-08-05 |   10000 |           0 | 20000 | 30000 | PAGADO  |
  10. |          6 | 2011-08-05 |    5000 |           0 | 15000 | 20000 | DEBE    |
  11. |          7 | 2011-08-05 |   10000 |           0 |     0 | 10000 | OCUPADO |
  12. +------------+------------+---------+-------------+-------+-------+---------+
  13. 7 rows in set (0.00 sec)
Si sumo el contenido de cada columna, daría:
Código MySQL:
Ver original
  1. mysql> SELECT SUM(entrega)entrega, SUM(consumicion)consumicion, SUM(saldo)saldo, SUM(total) total
  2.     -> FROM `test`.`alquiler`;
  3. +---------+-------------+--------+--------+
  4. | entrega | consumicion | saldo  | total  |
  5. +---------+-------------+--------+--------+
  6. |   90000 |       26000 | 100000 | 216000 |
  7. +---------+-------------+--------+--------+
  8. 1 row in set (0.00 sec)
Como podrás ver, no hay combinación de importes que de una cifra semejante a la que buscas.
Pero para ser más preciso, veremos qué pasaría si hago las sumas de tu primera consulta de separadamente, para ver qué suma:
Código MySQL:
Ver original
  1. mysql> SELECT SUM(total) suma_total
  2.     -> FROM alquiler
  3.     -> WHERE fentrada BETWEEN '2001-01-01' AND '2011-08-05' AND estado='PAGADO' OR estado='OCUPADO'
  4.     -> UNION ALL
  5.     -> SELECT SUM(entrega)
  6.     -> FROM alquiler
  7.     -> WHERE fentrada BETWEEN '2011-01-08' AND '2011-05-08' AND estado='OCUPADO'
  8.     -> UNION ALL
  9.     -> SELECT SUM(entrega)
  10.     -> FROM alquiler
  11.     -> WHERE fentrada BETWEEN '2011-01-08' AND '2011-05-08' AND estado='DEBE';
  12. +------------+
  13. | suma_total |
  14. +------------+
  15. |      83000 |
  16. |       NULL |
  17. |       NULL |
  18. +------------+
  19. 3 rows in set (0.00 sec)
Como puedes apreciar, la primera consulta da un resultado, pero las siguientes dos dan NULL, porque en realidad no hay registros que cumplan las condiciones puestas (atención, lo único que hice fue tomar las subconsultas tal y como las escribiste).

Ahora bien, si lo que deseas es verificar que entrega+consumicion+saldo es iguala total, podemos hacer así:
Código MySQL:
Ver original
  1. mysql>mysql> SELECT SUM(entrega) + SUM(consumicion) + SUM(saldo) TotalSuma, SUM(total) total
  2.     -> FROM `test`.`alquiler`
  3.     -> WHERE fentrada BETWEEN '2001-01-01' AND '2011-08-05';
  4. +-----------+--------+
  5. | TotalSuma | total  |
  6. +-----------+--------+
  7. |    216000 | 216000 |
  8. +-----------+--------+
  9. 1 row in set (0.00 sec)

Si no es eso lo que quieres suma, será mejor que nos digas exactamente qué es lo que quieres calcular, y sobre la base de qué datos, porque no se comprende bien lo que buscas.
Por otro lado, ten cuidado con las sumas que se realicen, porque ciertas operaciones aritméticas, por razonables que sean, pueden generar falsos resultados porque no se estén planteando correctamente. Hay muchos trucos y enigmas matemáticos que surgen de juegos de numeros (Cualquier duda, consultar el libro El hombre que calculaba, de Malba Tahan).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 05/08/2011 a las 20:45