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

SUM() a diferentes tablas ! ! !

Estas en el tema de SUM() a diferentes tablas ! ! ! en el foro de Mysql en Foros del Web. SALUDOS! Necesito ayuda en ésta consulta . . . no tengo idea de como comenzarla . . . ya que los inners no sirven . ...
  #1 (permalink)  
Antiguo 04/06/2009, 15:05
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 8 meses
Puntos: 4
Exclamación SUM() a diferentes tablas ! ! !

SALUDOS!

Necesito ayuda en ésta consulta . . .
no tengo idea de como comenzarla . . . ya que los inners no sirven . . .

Comenzemos con los datos

TABLA1 -> idDoc, fecha, usr, Importe
TABLA2 -> idDes, fecha, usr, Importe

En TABLA1 se meten varios Docs, los cuales al final se entrega un reporte mensual, anual, etc . . . por lo cual necesito sumar el Importe y agruparlo por usuario . . .

En TABLA2 es distinto, sólo si es necesario, se registra un Doc relacionado a un usr . . . el Importe de ésta tabla se le resta a los Importes de la TABLA1 dependiendo del mes . . . :

No logro hacer que cuadre . . .

SELECT SUM(TABLA1.importe - TABLA2.importe) AS real
FROM TABLA1
INNER JOIN TABLA2
ON TABLA1.usr = TABLA2.usr
AND MONTH(TABLA1.fecha) = 'x'

Mmm . . . no me dá los valores que necesito . . .


Gracias por los coments ! ! ! !
  #2 (permalink)  
Antiguo 04/06/2009, 15:26
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: SUM() a diferentes tablas ! ! !

Que valores esperas?

Prueba esto:

Código mysql:
Ver original
  1. Prueba esto:
  2. SELECT SUM(tr.resta) suma from
  3. (SELECT (TABLA1.importe - TABLA2.importe) resta
  4. FROM TABLA1 t1
  5. INNER JOIN TABLA2 t2
  6. ON t1.usr = t2.usr
  7. AND MONTH(t1.fecha) = 'x')tr;

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 04/06/2009 a las 15:55
  #3 (permalink)  
Antiguo 04/06/2009, 15:55
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: SUM() a diferentes tablas ! ! !

Los datos . . .mmm . . . sólo me importa el usr y el total de su Importe (Doc-Des)

Por ahorita me ha quedado así . . .


Código MySQL:
Ver original
  1. SELECT usr,
  2.        FORMAT(SUM(TABLA1.importe)-(Select Sum(TABLA2.importe) From TABLA2 Where TABLA2.usr = 'x' AND MONTH(TABLA2.fecha) = 'y'),2) AS TOTAL
  3. FROM TABLA1
  4. WHERE TABLA1.usr = 'x'
  5. AND MONTH(TABLA1.fecha) = 'y'

Pero se ve interesante el aporte de huesos . . . lo probaré, para evitarme hardcodear la 'x' . . .
Les contaré . . .



Grax . . .
  #4 (permalink)  
Antiguo 05/06/2009, 13:19
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: SUM() a diferentes tablas ! ! !

Saludos de nuevo . . .

Que creen ? ? ?
Super consultota que tuve que hacer :s . . .

Ya que al momento de implementar SUM(importe) - (select. . . . . . . etc . . .) no cumplia con la condicion de restar los que tuvieran cierto status . . .

Sin contar que tengo que juntar 2 tablas (UNION)


Código MySQL:
Ver original
  1. SELECT SUM(T1.importe), (Select SUM(T2.importe) From T2 Where T2.Usr = T1.Usr And MONTH(fecha)='x')
  2. FROM T1
  3. WHERE MONTH(fecha)='x'
  4. AND T1.Stat != 2
  5. SELECT SUM(T3.importe), (Select SUM(T2.importe) From T2 Where T2.Usr = T3.Usr And MONTH(fecha)='x')
  6. FROM T3
  7. WHERE MONTH(fecha)='x'
  8. AND T3.Stat != 2;

Así Obtengo

La suma de Importes de la T1 y la suma de descuentos de la T2
+
La suma de Importes de la T3 y la suma de descuentos de la T2

Y con código le resto un campo al otro . . . porque ? ? ?
porque había errores al momento de hacer los cálculos desde MySQL . . .

Mi consulta con errores era:


Código MySQL:
Ver original
  1. SELECT SUM(T1.importe) - (Select SUM(T2.importe) From T2 Where T2.Usr = T1.Usr And MONTH(fecha)='x')
  2. FROM T1
  3. WHERE MONTH(fecha)='x'
  4. AND T1.Stat != 2
  5. SELECT SUM(T3.importe)- (Select SUM(T2.importe) From T2 Where T2.Usr = T3.Usr And MONTH(fecha)='x')
  6. FROM T3
  7. WHERE MONTH(fecha)='x'
  8. AND T3.Stat != 2;

Porque me daba cálculos erroneos ? ? ?
Porque la suma de los importes no respetaba el Stat != 2, pero la suma de descuentos si ! ! ! !

rarísimo . . .

Ó mas bien . . . me falta echarle ojo a los detalles. . .

Por cierto . . . la consulta de huesos sólo me dá 1 resultado . . . mmm . . . la seguiré checando . . .

Nos estamos leyendo . . .
Bye Bye ! ! !
  #5 (permalink)  
Antiguo 05/06/2009, 13:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: SUM() a diferentes tablas ! ! !

Cita:
Por cierto . . . la consulta de huesos sólo me dá 1 resultado . . . mmm . . . la seguiré checando . . .
NA1TM3R
Cuando se hace uso de la función sum, el resultado es un unico valor. (El valor de la suma)
Si quieres que te de multiples resultados, es necesario hacer uso de group by para generar varios resultados en una consulta de ese tipo, de esta forma, obtendrías la suma agrupada por el campo correspondiente. Si el campo tiene 5 registros diferentes, te dará 5 sumas.
Solucionaste el problema?

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 05/06/2009, 13:40
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: SUM() a diferentes tablas ! ! !

Ahhh claro que lo agrupo . . . en éste caso por Usr . . . es lo que me interesa . . .

Pero . . . como la tabla primaria es derived, no contiene ésa columna . . .

de hecho es la primer vez que veía una consulta así . . .

Tienes algún link sobre cómo implementar éste tipo de tablas ? ? ?
  #7 (permalink)  
Antiguo 05/06/2009, 13:46
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: SUM() a diferentes tablas ! ! !

http://dev.mysql.com/doc/refman/5.0/...med-views.html

Lo que necesites, preguntalo.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 05/06/2009, 17:27
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: SUM() a diferentes tablas ! ! !

Saludos ! ! !

Ahora entiendo el porque de las tablas temporales . . .

Pero no sé . . . que tan práctico sea el utilizarlo. . . ya que como mencionaba . . . tengo 2 tablas . . . (Sucursal1, Sucursal2) y otra (Descuentos) que resta la sumatoria ya sea mensual, anual, diaria . . . a las otras 2 tablas . . . Todo ésto en relación al Usuario . . .

En base a lo que entendí de las tablas temporales . . .
tengo que crear una tabla con los datos que necesito

Y hacer un select a ésa misma tabla con los mismos datos, pero ya con la operación (sum,avg,etc...)

El código sigue quedando grandísimo . . . sobre todo por el UNION . . .
Aquí la cuestión es . . .

Que tan rápido será ? ? ? . . .

Grax por los comments huesos . . .

Nos seguiremos leyendo . . . .

Buen FinDe ! ! ! !
  #9 (permalink)  
Antiguo 05/06/2009, 17:34
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: SUM() a diferentes tablas ! ! !

Las subconsultas, siempre tendrán problemas de procesamiento. En algunas ocasiones son lentas, teniendo en cuenta que la consulta derivada, puede conllevar muchos registros de salida y si a eso le sumas la operación que realizas por fuera de ella, podría ser otro tiempo considerable.

Su uso es muy cómodo, pero debes tener en cuenta no el tamaño de la consulta en lineas, sino de que procesos realiza en cada etapa. Si los procesos son muy grandes, sería cuestión de buscar otra técnica o bien, realizar las consultas por separado.

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 20/08/2009, 16:25
 
Fecha de Ingreso: agosto-2009
Mensajes: 2
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: SUM() a diferentes tablas ! ! !

Cita:
Iniciado por huesos52 Ver Mensaje
Las subconsultas, siempre tendrán problemas de procesamiento. En algunas ocasiones son lentas, teniendo en cuenta que la consulta derivada, puede conllevar muchos registros de salida y si a eso le sumas la operación que realizas por fuera de ella, podría ser otro tiempo considerable.

Su uso es muy cómodo, pero debes tener en cuenta no el tamaño de la consulta en lineas, sino de que procesos realiza en cada etapa. Si los procesos son muy grandes, sería cuestión de buscar otra técnica o bien, realizar las consultas por separado.

Un saludo
Hola Huesos, tengo un problema al restar 2 valores, creo que es algo mas facil que la situación descrita anteriormente, a ver si me doy a explicar:

Tengo 2 tablas donde quiero obtener la resta de un la suma de un "pagoTotal" y la suma de "pagos (abonados)" y una tercera que tiene que ver con ambas (facturacion) en el campo "folio":

1.- cuentas: almacena los abonos "pagos" realizados a la factura
2.- pedidos: en esta tabla tengo el "importe" "iva" y "total"
3.- facturacion: el estatus de la factura

En los totales es decir sum(importe), sum(iva), sum(total), sum(pagos) no tengo ningun problema el problema es restar sum(total) - sum(pagos), te muestro la consulta que intento hacer para obtener esta resta:

SELECT
sum(CU.pago)
,round(sum(P.total) - sum(CU.pago))

FROM pedidos P INNER JOIN clientes C ON P.idCliente=C.idCliente
LEFT JOIN usuarios U ON U.usu_id=P.responsable
LEFT JOIN facturacion F ON P.folio=F.folio
LEFT JOIN cuentas CU on CU.folio=F.folio

WHERE P.fechaAlta > '$fechaI'
AND P.fechaAlta < '$fechaF'
AND F.estatus='I'
AND F.estatusCuentas <> 1
AND F.cancel <> 1

El problema que tengo es que en sum(P.total) me suma el monto dependiendo de cuantos abonos haya hecho es decir se duplica triplica etc, estoy usando php mysql, intente con un GROUP BY pero no obtuve resultado, espero me haya dado entender. Gracias.
  #11 (permalink)  
Antiguo 21/08/2009, 07:51
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: SUM() a diferentes tablas ! ! !

hugopinaemiliano

te recomiendo abrir un nuevo tema explicando un poco mejor el tema.
Puedes poner los create table y los inserts con los que estas haciendo las pruebas y los resultados que deseas obtener.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #12 (permalink)  
Antiguo 21/08/2009, 16:18
 
Fecha de Ingreso: agosto-2009
Mensajes: 2
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: SUM() a diferentes tablas ! ! !

Cita:
Iniciado por huesos52 Ver Mensaje
hugopinaemiliano

te recomiendo abrir un nuevo tema explicando un poco mejor el tema.
Puedes poner los create table y los inserts con los que estas haciendo las pruebas y los resultados que deseas obtener.

saludos
Gracias por la respuesta, realizare la explicación a detalle.
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 12:58.