SQL
WITH enrol_dedup AS (
SELECT DISTINCT me.courseid, mue.userid
FROM mdl_user_enrolments mue
JOIN mdl_enrol me ON me.id = mue.enrolid
)
SELECT c.id AS courseid,
c.fullname AS curso,
COUNT(*) AS inscritos_unicos
FROM enrol_dedup AS e
JOIN mdl_course AS c ON c.id = e.courseid
GROUP BY c.id, c.fullname
ORDER BY inscritos_unicos DESC;SELECT DISTINCT me.courseid, mue.userid: Este é o núcleo do CTE.- Seleciona o
courseidda tabelamdl_enrole ouseridda tabelamdl_user_enrolments.DISTINCTé crucial aqui. Ela garante que, se um usuário estiver inscrito em um curso várias vezes (por exemplo, por meio de diferentes métodos de inscrição, ou se o sistema possuir vários métodos de inscrição), ele seja contado somente uma vez para essecourseidespecífico. Isso cria efetivamente uma lista única de pares (ID do curso, ID do usuário), representando cada usuário inscrito em cada curso.
enrol_dedupfornece uma lista limpa e sem duplicações de usuários associados a cada curso, reduz a faixa de dados noJOINque, por sua vez, reduz o consumo de memória e entrega o resultado eficientemente.- Seleciona o
