Relatório de quantidade (percentagem) de alunos concluinte consolidado por curso do Moodle com comando SQL

Relatório de quantidade (percentagem) de alunos concluinte consolidado por curso do Moodle com comando SQL

por Lino Vaz Moniz -
Número de respostas: 0

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