1
resposta

SUBSTITUINDO HAVING POR SUB-QUERY

Elaborei o seguinte código para transformar esta query:

 SELECT curso.nome,
         COUNT(aluno_curso.aluno_id) numero_alunos
    FROM curso
    JOIN aluno_curso ON aluno_curso.curso_id = curso.id
GROUP BY 1
ORDER BY numero_alunos DESC
    HAVING COUNT(aluno_curso.aluno_id) > 2;

Nesta abaixo, considerando a solicitação do professor de inserir uma Sub-query:

SELECT curso
    FROM (
            SELECT curso.nome AS curso,
                     COUNT(aluno_curso.aluno_id) numero_alunos
                FROM curso
                JOIN aluno_curso ON aluno_curso.curso_id = curso.id
            GROUP BY 1
            ORDER BY numero_alunos DESC
) AS curso_n_alunos
    WHERE numero_alunos > 2;

Ela trouxe como retorno o curso PHP, o qual de fato possui mais do que dois alunos, que validei pela Query abaixo:

SELECT curso.nome,
       COUNT(curso_id) AS "QUANTIDADE DE ALUNOS"
    FROM curso
    JOIN aluno_curso ON aluno_curso.curso_id = curso.id
GROUP BY curso.nome
ORDER BY "QUANTIDADE DE ALUNOS" DESC;

Alguém construiu algo diferente e obteve retorno semelhante?

1 resposta

Gabriel, não existe problema algum em fazer queries de maneiras diferentes, se a logica e o resultado forem iguais. o Having server pra fazer um filtro em dados agrupados. Talvez, dependendo de como a tabela esta criada, voce perceberá um problema de performance. No Where é possivel criar um indice, e isso melhora a performance das suas queries.