Hola FBCM FBCM creo que esta consulta te puede ayudar, y podrías modificarla para que te arroje lo que tu quieres.
SELECT
u.firstname AS first,
u.lastname AS last,
u.idnumber AS ID,
u.institution AS School,
c.shortname AS coursefullname,
COALESCE(ROUND(gg.finalgrade,0),0) as finalgrade,
CASE
WHEN DATEDIFF (NOW(), FROM_UNIXTIME(u.lastaccess))>200
THEN "never started"
ELSE
CONCAT (DATEDIFF (NOW(), FROM_UNIXTIME(u.lastaccess)), " ", "days")
END AS last_logged_in
FROM mdl_user u
INNER JOIN mdl_role_assignments ra ON ra.userid = u.id
INNER JOIN mdl_context ct ON ct.id = ra.contextid
INNER JOIN mdl_course c ON c.id = ct.instanceid
INNER JOIN mdl_role r ON r.id = ra.roleid
LEFT JOIN
(
SELECT
u.id AS userid,c.id as courseid,
g.finalgrade AS finalgrade
FROM mdl_user u
JOIN mdl_grade_grades g ON g.userid = u.id
JOIN mdl_grade_items gi ON g.itemid = gi.id
JOIN mdl_course c ON c.id = gi.courseid where gi.itemtype = 'course'
) gg ON gg.userid = u.id and gg.courseid = c.id
WHERE r.id = 9
------------------------------------
el campo r.id = 5 corresponde al rol de alumno, solo será que revises la tabla de alumno y cambies el id al que corresponde al docente
Igual aqui te dejo un link que hay muchas consultas en SQL para que las veas y mires cual te sirve.
https://moodle.org/mod/forum/discuss.php?d=153059
puedes encontrar alguno de gran ayuda.
saludos.