Ver Mensaje Individual
  #11 (permalink)  
Antiguo 31/08/2008, 08:48
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Select con left join. Consulta compleja...Para mí

Marcelo,
te diré antes que nada que no me gusta mucho cómo estableces la relación entre las tablas agentes y evaluaciones por medio de campos de texto, Nombre_agente y agente_evaluado, respectivamente. Pero lo que no es aceptable es poner la fecha_evaluacion como varchar. Tendría que ser un campo de tipo date; y tampoco veo razonable lo de la hora como varchar, cuando la hora debería ser de tipo time, y si siempre va a ir unida a la fecha, puesto que es fecha y hora de la evaluación, deberían aparecer los datos de fecha y hora en un único campo de tipo datetime. Debes cuidar esas cosas si quieres que luego todo sea más fácil y la tabla ofrezca mejor rendimiento. Pero vamos a por la consulta que quieres.
Prueba con esto:
Cita:
SELECT a.Nombre_agente, a.Empleador_agente, a.tipo_turno, a.Estado, IFNULL( T1.eval, '0' ) evaluaciones
FROM agentes a
LEFT JOIN (SELECT a.Nombre_agente na, COUNT( a.Nombre_agente ) eval
FROM agentes a
INNER JOIN `evaluaciones` e ON a.Nombre_agente = e.agente_evaluado
WHERE e.fecha_evaluacion
BETWEEN '2008/08/01'
AND '2008/08/30'
GROUP BY a.Nombre_agente
)T1 ON a.Nombre_agente = T1.na
ORDER BY a.Nombre_agente
HE EDITADO para hacer algunas correcciones, puesto que de la tabla evaluaciones sólo necesitas la cuenta de evaluaciones, no es necesario un segundo left join y tampoco una segunda agrupación...

Última edición por jurena; 31/08/2008 a las 09:51 Razón: He editado para hacer correcciones