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
courseid
da tabelamdl_enrol
e ouserid
da 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 essecourseid
especí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_dedup
fornece uma lista limpa e sem duplicações de usuários associados a cada curso, reduz a faixa de dados noJOIN
que, por sua vez, reduz o consumo de memória e entrega o resultado eficientemente.- Seleciona o