Tag: Relatórios

  • Total de inscritos por curso

    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 tabela mdl_enrol e o userid da tabela mdl_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 esse courseid 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.
      O CTE enrol_dedup fornece uma lista limpa e sem duplicações de usuários associados a cada curso, reduz a faixa de dados no JOIN que, por sua vez, reduz o consumo de memória e entrega o resultado eficientemente.