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

Calculos por medio de consultas

Estas en el tema de Calculos por medio de consultas en el foro de Mysql en Foros del Web. Hola, Tengo un problema con una consulta. Tengo dos tablas: SUCURSALES Y OPSUCURSALES, de ahi calculo el balance por medio de una consulta. el problema ...
  #1 (permalink)  
Antiguo 23/11/2012, 14:07
 
Fecha de Ingreso: noviembre-2012
Mensajes: 3
Antigüedad: 11 años, 5 meses
Puntos: 0
Calculos por medio de consultas

Hola, Tengo un problema con una consulta. Tengo dos tablas: SUCURSALES Y OPSUCURSALES, de ahi calculo el balance por medio de una consulta. el problema es que me arroja el resultado de toda la tabla, pero lo estoy separando por su id. Ejem:

Tabla: Sucursales
id
nombre_sucursal
banco
no_cuenta

tabla: opsucursales
id
sucursales_id
depositos
retiros

Esto es mi codigo

Código MySQL:
Ver original
  1.     SUCURSALES.NOMBRE_SUCURSAL,  
  2.     SUCURSALES.BANCO,  
  3.     SUCURSALES.NO_CUENTA,  
  4.     (SUM(OPSUCURSALES.depositos) - SUM(OPSUCURSALES.retiros) ) as BALANCE
  5. from SUCURSALES, opsucursales
  6. WHERE SUCURSALES.ID=OPSUCURSALES.SUCURSALE_ID

el resultado es este:

NOMBRE_SUCURSAL BANCO NO_CUENTA BALANCE
CEBALLOS BANCOMER 171976842 174

el resultado esperado es este:
NOMBRE_SUCURSAL BANCO NO_CUENTA BALANCE
CEBALLOS BANCOMER 171976842 50
SANTIAGUILLO BANCOMER 171956778 111
RODEO BANCOMER 123453456 23

Por favor si alguien me pudiera ayudar lo agradaceria mucho ya que he intentado de varias maneras. Se me esta acabando el tiempo para la entrega

Última edición por gnzsoloyo; 23/11/2012 a las 14:27 Razón: Consult apoco legible por falta de estructurado
  #2 (permalink)  
Antiguo 23/11/2012, 14:29
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Calculos por medio de consultas

Hola consuesparza

Cuando en una consulta utilizas funciones de agrupación (COUNT, SUM, MIN, MAX, ETC) pero no utilizas la cláusula GROUP BY, los resultados serán siempre sobre toda la tabla.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------+-------+
  3. | nombre | valor |
  4. +--------+-------+
  5. | Hugo   |    10 |
  6. | Paco   |     7 |
  7. | Luis   |     9 |
  8. | Hugo   |    13 |
  9. | Hugo   |    16 |
  10. | Paco   |    15 |
  11. | Luis   |     5 |
  12. +--------+-------+
  13. 7 rows in set (0.00 sec)
  14.  
  15. mysql> SELECT nombre, SUM(valor) total
  16.     -> FROM tabla;
  17. +--------+-------+
  18. | nombre | total |
  19. +--------+-------+
  20. | Hugo   |    75 |
  21. +--------+-------+
  22. 1 row in set (0.00 sec)
  23.  
  24. mysql> SELECT nombre, SUM(valor) total
  25.     -> FROM tabla
  26.     -> GROUP BY nombre;
  27. +--------+-------+
  28. | nombre | total |
  29. +--------+-------+
  30. | Hugo   |    39 |
  31. | Luis   |    14 |
  32. | Paco   |    22 |
  33. +--------+-------+
  34. 3 rows in set (0.00 sec)

Investiga un poco acerca de cómo se usa esta cláusula para ver si puedes obtener los resultados por tu propia cuenta. Si continuas con problemas postea algo de lo que intentaste hacer, dinos cuál es la estructura de tus tablas y pon alguno datos de ejemplo. de esta manera será más fácil tratar de ayudarte a resolver la consulta

Saludos
Leo.
  #3 (permalink)  
Antiguo 24/11/2012, 11:01
 
Fecha de Ingreso: noviembre-2012
Mensajes: 3
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Calculos por medio de consultas

Hola Leo Muchas gracias por la ayuda.

ya intente lo que me dijiste, primero que nada le quite el WHERE ya q no funciona un group by con un where, pero si me interesa que los agrupe teniendo en cuenta los ID de las tablas relacionadas, por lo que puse este codigo:

Código MySQL:
Ver original
  1.     SUCURSALES.NOMBRE_SUCURSAL,  
  2.     SUCURSALES.BANCO,  
  3.     SUCURSALES.NO_CUENTA,  
  4.     (SUM(OPSUCURSALES.depositos) - SUM(OPSUCURSALES.retiros) ) BALANCE
  5. from  
  6.     SUCURSALES, opsucursales
  7. group by SUCURSALES.ID=OPSUCURSALES.SUCURSALE_ID;

Resultado:


NOMBRE_SUCURSAL BANCO NO_CUENTA BALANCE
CEBALLOS BANCOMER 171976842 3828
CEBALLOS BANCOMER 171976842 174

pero yo tengo mas sucursales en en mi base de datos...

mira luego lo intente asi:

Código MySQL:
Ver original
  1.     SUCURSALES.NOMBRE_SUCURSAL,  
  2.     SUCURSALES.BANCO,  
  3.     SUCURSALES.NO_CUENTA,  
  4.     (SUM(OPSUCURSALES.depositos) - SUM(OPSUCURSALES.retiros) ) BALANCE
  5. from SUCURSALES, opsucursales
  6. group by SUCURSALES.ID;
NOMBRE_SUCURSAL---------------BANCO-----------NO_CUENTA-------------BALANCE
CEBALLOS----------------------- BANCOMER----------171976842----------------174
RODEO-------------------------------HSBC--------------214748364----------------174
SANTIAGUILLO ------------------BANCOMER---------168635846-----------------174
LA PLAZUELA-------------------- BANCOMER---------168635498-----------------174
OTINAPA--------------------------BANCOMER---------172222914-----------------174
FCO.I.MADERO------------------ BANCOMER---------171913204-----------------174
SOMBRERETE-------------------- BANCOMER---------179740171-----------------174

masomenos esto ya casi es el resultado pero 174 es el resultado del balance de toda la tabla no de cada sucursal y lo que quiero es el balance de cada sucursal, por eso yo compraba los ID en el primer ejem.

Última edición por gnzsoloyo; 25/11/2012 a las 09:52 Razón: Codigo poco legible y otro sin etiquetar
  #4 (permalink)  
Antiguo 25/11/2012, 09:41
 
Fecha de Ingreso: noviembre-2012
Mensajes: 32
Antigüedad: 11 años, 4 meses
Puntos: 3
Respuesta: Calculos por medio de consultas

Justamente porque no le pones el where te suma toda la tabla. Porque dices que un where no funciona con el group by?
Después del where pones el group by. DEbes establecer los vicnulos de la tablas, si no por cada elemento una tabla te cuenta todos los elementos de la otra tabla. El group by no sustituye el where.


Por ejemplo:

Código MySQL:
Ver original
  1. SELECT SUCURSALES.NOMBRE_SUCURSAL, SUCURSALES.BANCO, SUCURSALES.NO_CUENTA, (SUM(OPSUCURSALES.depositos) - SUM(OPSUCURSALES.retiros) ) BALANCE
  2. FROM SUCURSALES, opsucursales
  3. where SUCURSALES.ID=OPSUCURSALES.SUCURSALE_ID
  4. GROUP BY SUCURSALES.ID
  5. ORDER SUCURSALES.ID asc,  SUCURSALES.BANCO asc,

Última edición por gnzsoloyo; 25/11/2012 a las 09:48 Razón: Codigo SQL no etiquetado.
  #5 (permalink)  
Antiguo 25/11/2012, 09:50
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Calculos por medio de consultas

Cita:
primero que nada le quite el WHERE ya q no funciona un group by con un where
¿De dónde has sacado eso?


Lo que puede suceder es que lo hayas escrito mal, o que intentes usar los alias del SELECT en el WHERE, lo que ningún DBMS te admitirá...
Pero lo que dices no es cierto.

Revisa de nuevo lo que haces.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: medio, select, tabla, calculo
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 00:35.