1
resposta

Subquery para mais dinamicidade na atividade 2.5

Tentei utilizar sub query para dar a capacidade do código da aula 2.5 buscar as categorias mais requisitadas de forma dinâmica, para quando houver mais de uma categoria com o valor máximo de alunos. O resultado foi o abaixo, e parece funcionar corretamente, porém gostaria de saber se seria possível obter o mesmo resultado sem o uso desse artifício, com uma query mais simples.

SELECT
    ca.nome as categoria,
    COUNT(*) as Alunos_matriculados
FROM aluno_curso ac
INNER JOIN curso c on c.id = ac.curso_id
INNER JOIN categoria ca on ca.id = c.categoria_id
GROUP BY 1
HAVING COUNT(*)= (
    SELECT MAX (qtd_alunos.Alunos_matriculados)
    FROM
        (SELECT
            ca.nome as categoria,
            COUNT(*) as Alunos_matriculados
        FROM aluno_curso ac
        INNER JOIN curso c on c.id = ac.curso_id
        INNER JOIN categoria ca on ca.id = c.categoria_id
        GROUP BY 1
        ORDER BY Alunos_matriculados DESC
        LIMIT 1) qtd_alunos
)
ORDER BY Alunos_matriculados DESC;
1 resposta

Olá, Augusto, tudo bem?

A sua query ficou muito legal, você está indo muito bem.

Vou deixar aqui para você uma outra query, que e uma forma mais simples de obter o resultado:

SELECT categoria.nome, COUNT(aluno_curso.curso_id) AS "numero de alunos"
    FROM categoria
        JOIN curso ON curso.categoria_id = categoria.id
        JOIN aluno_curso ON aluno_curso.curso_id = curso.id
        GROUP BY 1
        ORDER BY 2 DESC;

Continue assim e bons estudos!