Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/10/2010, 23:01
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Promdio y LEFT JOIN

Es posible que el orden de las tablas sea incorrecto.
El SQL es un lenguaje que realiza las cosas de modo que no se cumple la máxima de "el orden de los factores no altera el producto". Bueno, en este caso si lo altera.
En el SQL las tablas se leen normalmente de izquierda a derecha, de modo que si a la izquierda tienes la tabla con la menor cantidad de registros, o con pocos registros relacionados con la tabla siguiente, entonces los resultados obtenidos de la junta serán escasos, lo que hará que no se representen ciertos datos correctamente.

Lo que te conviene hacer es ordenar las tablas por jerarquía, de modo tal que a la izquierda esté la tabla primaria que contenga todos los items sobre los que se hará la consulta, y a la derecha las tablas dependientes de esa.
Si en el primer ejemplo estás poniendo la tabla SS_TAREAS, debo suponer que esa es la tabla principal y por tanto la sentencia debería ser mas o menos:

Código MySQL:
Ver original
  1.     o.id,
  2.     o.objetivo,
  3.     o.f_ini,
  4.     o.f_fin,
  5.     f.name,
  6.     AVG(t.evalua) evalua
  7.         sipp.ss_tareas t LEFT JOIN
  8.         sipp.ss_objetive o ON t.idopera = o.id LEFT JOIN
  9.         sipp.ss_form f ON o.idges  = f.formula
  10.     o.idare = 65 AND
  11.     o.tipo = 4 AND
  12.     o.estado = 'y'
  13. ORDER BY f.formula

Esta consulta te devolverá la media de `EVALUA`, de todas las tareas agrupadas por objetivos. Pero si alguna tarea no está relacionada con un objetivo, su valor será NULL y no se promediará ese objetivo, ya que las funciones de agregación no pueden sumar NULL, sino solamente los campos con valores reales.
Tal vez si explicas un poco mejor qué es lo que deseas obtener, podamos pensar en una forma más eficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)