Tema: SUM y JOIN
Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/11/2009, 06:02
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: 17 años
Puntos: 2658
Respuesta: SUM y JOIN

Cita:
Porque no sirve la fecha como valor de concordancia?, porque se crean en el mismo dia, y tiene la misma fecha.
Porque si el mismo día se crearon el cliente 14,15,, 16, 17, 18, y 19, lo que tendrás al cruzar los campos fecha es
Cita:
Cliente14 - DatosCliente14
Cliente14 - DatosCliente15
Cliente14 - DatosCliente16
Cliente14 - DatosCliente17
Cliente14 - DatosCliente18
Cliente14 - DatosCliente19
Cliente15 - DatosCliente14
Cliente15 - DatosCliente15
Cliente15 - DatosCliente16
Cliente15 - DatosCliente17
Cliente15 - DatosCliente18
Cliente15 - DatosCliente19
...
... y así hasta llegar al Cliente19
Y esto porque el campo tiene el mismo valor en todos los casos. Es lo que se denomina "producto cartesiano". Para evitarlo hay que lograr que la relación sea 1:1, o bien replantear la lógica de la consulta, ya que lo que estás pidiendo aquí:
Código sql:
Ver original
  1. SELECT
  2.     SUM( pos_loc_tpv.cta ) AS cta,
  3.     SUM( pos_loc_cln.total ) AS Total,
  4.     COUNT( pos_loc_tpv.vid ) AS Vid,
  5.     COUNT( pos_loc_cln.clid ) AS Cliente
  6. FROM pos_loc_cln
  7. INNER JOIN pos_loc_tpv ON pos_loc_tpv.fecha = pos_loc_cln.fch
  8. WHERE pos_loc_cln.fch = '2009-11-09'
  9. AND pos_loc_tpc.dev = '0'
No es lo que dices buscar...
Dos preguntas:
1) Si la tabla que administra los clientes creados, es pos_loc_cln, ¿Por qué los datos personales están en pos_loc_tpv, donde se supone que estarían las ventas.
2) ¿Por qué almacenas dos datos que son calculables por consulta en una tabla primaria como es pos_loc_cln? No es eficiente y requiere un acceso a disco innecesario...

Yendo al problema, si la venta y la cantidad correspondientes a un día están en una sola tabla, la otra es innecesaria:
Código sql:
Ver original
  1. SELECT
  2.   SUM(`TotalVenta`) Venta,
  3.   SUM(`TotalProductos`) Productos,
  4.   COUNT(*) SumaClientes
  5. FROM
  6.   (SELECT
  7.       SUM(T.dcta ) AS `TotalVenta`,
  8.       SUM(T.dprc) AS `TotalProductos`,
  9.       T.clid AS Clientes
  10.   FROM pos_loc_tpv T
  11.   WHERE T.fecha = '2009-11-09' AND T.dev = '0'
  12.   GROUP BY Clientes) T1;
Se requiere que sea una subconsulta para que no cuente dos veces clientes que puedan haber hecho dos compras el mismo día.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)