select tu.mr_fname, tu.mr_lname, count(ts.mr_id) as `count`
from tbl_user tu
inner join tbl_schedule ts on ts.mr_id = tu.mr_id and
ts.sch_date between '2012-01-01' and '2012-08-01'
group by tu.mr_id
Lo anterior le permitirá obtener todos los usuarios con una fila en la programación. Por lo tanto, los usuarios con un recuento de 0 no aparecerán.
select tu.mr_fname, tu.mr_lname, count(ts.mr_id) as `count`
from tbl_user tu
left join tbl_schedule ts on ts.mr_id = tu.mr_id and
ts.sch_date between '2012-01-01' and '2012-08-01'
group by tu.mr_id
Esta consulta seleccionará el nombre y el apellido del usuario y contará la cantidad de veces que la identificación del usuario aparece en la tabla de programación.
Lo hace agrupando por ID de usuario.
Y, además, utiliza una combinación izquierda basada en la identificación y la fecha del usuario. Es importante poner aquí la condición de fecha para que se seleccionen todos los usuarios. Esto se debe a que la combinación izquierda incluirá a todos los usuarios que tampoco coincidieron. Pero si coloca esto en la cláusula where, no se seleccionarán todos los usuarios. En otras palabras, no obtendrá un conteo de cero para 'gerry chandan' si coloca la condición de fecha en la cláusula where. En su lugar, se quedaría fuera de los resultados.