SQL - Sum de dos columnas distintas

 
Vista:
sin imagen de perfil

Sum de dos columnas distintas

Publicado por ignacio (4 intervenciones) el 14/05/2014 12:56:18
Buenas, antes de nada gracias por sus aportaciones para solventar mi problema. Y esque estoy intentando realizar una resta entre dos SUM de columnas de distintas tablas, pero me realiza otra operación.

Tabla 1
- id
- ventas

Tabla 2
- id
- compras

Quiero saber la diferencia entre las compras y las ventas.

La consulta que realizo es la siguiente:
Select SUM(tb1.ventas) - SUM(tb2.compras) from tabla1 as tb1, tabla2 as tb2

Me da un resultado distinto al de si lo hago manualmente, y es que me incluye la clausula cross join, porque? que estoy haciendo mal? Debería de unir las tablas con un inner join? pero si es así, debo de utilizar un where no?

El problema esque no entiendo muy bien lo que hace con esa consulta... Si alguien me lo pudiera explicar


Gracias y un saludo.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Sum de dos columnas distintas

Publicado por leonardo_josue (1173 intervenciones) el 15/05/2014 15:35:27
Hola Ignacio:

Primero, ¿a qué te refieres con que te da un resultado distinto? ¿es decir, qué se supone que tiene que regresar y qué es lo que regresa?

Segundo, no nos mencionas con qué base de datos ni no nos pones datos de ejemplo por lo tanto no es posible darte una respuesta puntual.

Tercero, analizando la consulta tienes varios detalles a considerar:

1. Estás listando las tablas en el FROM, pero en el WHERE no pones ninguna relación, por lo tanto se está realizando un PRODUCTO CARTESIANO entre las tablas, lo que implicaría un cálculo erróneo. En lugar de eso deberías utilizar JOIN's Explícitos (INNER, LEFT, RIGTH), dependiendo de tu lógica de negocio, ¿a qué me refiero? Si todos los registros en tu tabla VENTAS deben tener al menos un registro en la tabla COMPRAS, entonces puedes utilizar INNER, si puede haber VENTAS sin COMPRAS, entonces debes utilizar LEFT o RIGTH.

2. Estás utilizando funciones de agrupación (SUM), sin embargo no estás utilizando la cláusula GROUP BY, por lo tanto la suma será sobre el total de los registros, no sobre algún ID en particular, no sé si esto es correcto.

3. Si quieres realmente encontrar una suma total de ventas y a esa restarle la suma total de compras, debes CONSOLIDAR primeramente las tablas, ya que al tener una relación m-n los resultados de los cálculos también pueden ser impredecibles.

hace algunos días contesté una pregunta semejante en otro Foro Del Web, dale un vistazo para ver si la explicación te sirve para entender un poco mejor el problema.

http://www.forosdelweb.com/f86/query-para-activos-pendientes-1099130/

Si aun así, sigues sin dar con la respuestas, postea algunos datos de ejemplo de tus tablas y a partir de esos datos dinos qué es lo que esperas obtener como respuesta, así será más fácil tratar de ayudarte, y no olvides mencionar con qué BD estás trabajando, eso sería de mucha ayuda.

Saludos
Leo
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

Sum de dos columnas distintas

Publicado por Khristian (9 intervenciones) el 15/05/2014 15:46:41
Has dos consultas separadas.
Una con el sum de compras
Otra con el sum de ventas

Luego una tercera donde uses como fuente las consultas de suma de compras - ventas.

Cuando nos la gana el hacer una consulta infinita, que deseamos haga todas las operaciones de una vez, y que ademas, para futuras revisiones será un colmo revisar... es preferible ir por pasos.

Ademas, el SGBD igual hara los procesos por etapas.
Primero calculará la suma de compras, luego la suma de ventas, luego calculará la resta.

Saludos
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