O comando SQL a seguir permite gerar percentagem comparativa de qual curso mais alunos já concluíram.
O comando SQL gera uma lista com nome do curso, quantidade de alunos inscritos e quantidade de alunos concluintes. Com essas informações torna possível montar a percentagem de conclusão de alunos em cada curso.
Se a sua base for muito grande, é recomendado usar paginação e restringir filtro de dados para não travar a base. Para restringir, use no comando WHERE filtro por categoria de curso, por exemplo, para limitar dados.
Comando SQL que gera relatório com a lista de todos os cursos
SELECT c.id,c.fullname,COUNT(DISTINCT ue.id) AS countenrol,(SELECT COUNT(p.id) FROM mdl_course_completions p WHERE p.course=c.id AND p.timecompleted > 0 ) AS countenrolcompleted FROM mdl_role_assignments rs INNER JOIN mdl_role r ON rs.roleid=r.id INNER JOIN mdl_context e ON rs.contextid=e.id INNER JOIN mdl_enrol en ON e.instanceid=en.courseid INNER JOIN mdl_user_enrolments ue ON en.id=ue.enrolid INNER JOIN mdl_course c ON c.id=en.courseid WHERE e.contextlevel=50 AND rs.userid=ue.userid AND r.shortname='student' AND en.status=0 AND ue.status=0 GROUP BY c.id,c.fullname
Comando SQL que gera relatório com a lista dos cursos que tiver pelo menos um aluno concluinte
SELECT c.id,c.fullname,COUNT(DISTINCT ue.id) AS countenrol,(SELECT COUNT(p.id) FROM mdl_course_completions p WHERE p.course=c.id AND p.timecompleted > 0 ) AS countenrolcompleted FROM mdl_role_assignments rs INNER JOIN mdl_role r ON rs.roleid=r.id INNER JOIN mdl_context e ON rs.contextid=e.id INNER JOIN mdl_enrol en ON e.instanceid=en.courseid INNER JOIN mdl_user_enrolments ue ON en.id=ue.enrolid INNER JOIN mdl_course c ON c.id=en.courseid WHERE e.contextlevel=50 AND rs.userid=ue.userid AND r.shortname='student' AND en.status=0 AND ue.status=0 AND (SELECT COUNT(p.id) FROM mdl_course_completions p WHERE p.course=c.id AND p.timecompleted > 0 ) > 0 GROUP BY c.id,c.fullname