Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Subconsultas

Estas en el tema de Subconsultas en el foro de Mysql en Foros del Web. Saludos cordiales, mi pregunta es la siguiente gracias de antemano tengo una tabla "pagos" que almacena los pagos distribuidos en cuotas, si el pago no ...
  #1 (permalink)  
Antiguo 11/05/2011, 14:45
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 14 años, 4 meses
Puntos: 0
Subconsultas

Saludos cordiales, mi pregunta es la siguiente gracias de antemano


tengo una tabla "pagos" que almacena los pagos distribuidos en cuotas, si el pago no cubre la cuota, la proxima vez se crea un nuevo registro hasta completar con el numero de cuota corrependiente.
Como puedo hacer un select de todos los registros , pero que en cada registro "pintado" saber la suma de todos los pagos anteriores al registro que estoy pintando, osea algo como esto

Código MySQL:
Ver original
  1. id  monto   cuota   Suma
  2.         21  50.00    1        0
  3.         22  50.00    2        50
  4.         23  50.00    3        100
  5.         45  20.00    4        150
  6.         67  10.00    4        170
  7.         88  5.50     4        180
  8.         91  14.50    4        185.5
  9.         102 50.00    5        200
  10.         110 50.00    6        250

( hacer un SUM(monto) from pagos where id <"que el id actual")


codigo:

CREATE TABLE `prueba`.`pagos` (

`id` INT NOT NULL AUTO_INCREMENT ,

`total` DECIMAL(10,2) NOT NULL ,

`cuota` INT(5) NOT NULL ,

PRIMARY KEY (`id`) );

edit pagos;

INSERT INTO `prueba`.`pagos` (`id`, `total`, `cuota`) VALUES (21, '50', 1);

INSERT INTO `prueba`.`pagos` (`id`, `total`, `cuota`) VALUES (22, '50', 2);

INSERT INTO `prueba`.`pagos` (`id`, `total`, `cuota`) VALUES (23, '50', 3);

INSERT INTO `prueba`.`pagos` (`id`, `total`, `cuota`) VALUES (45, '20', 4);

INSERT INTO `prueba`.`pagos` (`id`, `total`, `cuota`) VALUES (67, '10', 4);

INSERT INTO `prueba`.`pagos` (`id`, `total`, `cuota`) VALUES (88, '5.5', 4);

INSERT INTO `prueba`.`pagos` (`id`, `total`, `cuota`) VALUES (91, '14.5', 4);

INSERT INTO `prueba`.`pagos` (`id`, `total`, `cuota`) VALUES (102, '50', 5);

INSERT INTO `prueba`.`pagos` (`id`, `total`, `cuota`) VALUES (110, '50', 6);
  #2 (permalink)  
Antiguo 11/05/2011, 15:06
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Subconsultas

Hola Marrselo:

Tú mism@ nos diste la respuesta:

Cita:
( hacer un SUM(monto) from pagos where id <"que el id actual")
Código MySQL:
Ver original
  1. mysql> select id, total, cuota,
  2.     -> ifnull((select sum(total) from pagos T2
  3.     -> where T2.id < T1.id), 0) calculado
  4.     -> from pagos T1;
  5. +-----+-------+-------+-----------+
  6. | id  | total | cuota | calculado |
  7. +-----+-------+-------+-----------+
  8. |  21 | 50.00 |     1 |      0.00 |
  9. |  22 | 50.00 |     2 |     50.00 |
  10. |  23 | 50.00 |     3 |    100.00 |
  11. |  45 | 20.00 |     4 |    150.00 |
  12. |  67 | 10.00 |     4 |    170.00 |
  13. |  88 |  5.50 |     4 |    180.00 |
  14. |  91 | 14.50 |     4 |    185.50 |
  15. | 102 | 50.00 |     5 |    200.00 |
  16. | 110 | 50.00 |     6 |    250.00 |
  17. +-----+-------+-------+-----------+
  18. 9 rows in set (0.45 sec)

Saludos
Leo.
  #3 (permalink)  
Antiguo 11/05/2011, 16:53
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Subconsultas

pero porque el ifnull mi estimado?
  #4 (permalink)  
Antiguo 12/05/2011, 07:55
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Subconsultas

Hola Marrselo:

¿Por qué no le quitas el IFNULL para que veas tu mismo cuál es la diferencia entre los resultados de la consulta?..

Saludos.
Leo.
  #5 (permalink)  
Antiguo 12/05/2011, 17:36
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Subconsultas

:S en buena onda mi estimado, te lo preguntaba porque ya le habia quitado el ifnull y me dio lo mismo,

SELECT id, total, cuota,
(SELECT sum(total) FROM pagos T2
WHERE T2.id < T1.id) calculado
FROM pagos T1;

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola Marrselo:

¿Por qué no le quitas el IFNULL para que veas tu mismo cuál es la diferencia entre los resultados de la consulta?..

Saludos.
Leo.
  #6 (permalink)  
Antiguo 13/05/2011, 08:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Subconsultas

Hola de nuevo marcelo:

Mi comentario tampoco fue en mala onda, pero realmente me parece un poco extraña tu pregunta. Las consultas con el IFNULL y sin el NO SON IGUALES, observa bien el primer registro de la lista.

Sin IFNULL

Código SQL:
Ver original
  1. mysql> SELECT id, total, cuota,
  2.     -> (SELECT SUM(total) FROM pagos T2
  3.     -> WHERE T2.id < T1.id) calculado
  4.     -> FROM pagos T1;
  5. +-----+-------+-------+-----------+
  6. | id  | total | cuota | calculado |
  7. +-----+-------+-------+-----------+
  8. |  21 | 50.00 |     1 |      NULL |
  9. ...

Con el IFNULL

Código MySQL:
Ver original
  1. mysql> SELECT id, total, cuota,
  2.     -> ifnull((SELECT sum(total) FROM pagos T2
  3.     -> WHERE T2.id < T1.id), 0) calculado
  4.     -> FROM pagos T1;
  5. +-----+-------+-------+-----------+
  6. | id  | total | cuota | calculado |
  7. +-----+-------+-------+-----------+
  8. |  21 | 50.00 |     1 |      0.00 |
  9. ...

Parece ser que no estás al tanto de para qué funciona la función IFNULL, y es justamente para evitar que aparezcan resultados nulos en la consulta. En este caso, en lugar de NULL lo reemplaza con un 0.00. Checa esta liga para leer un poco más acerca de esta función.


12.2. Funciones de control de flujo


Saludos
Leo.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:55.