1
resposta

[Projeto] Solução

Minha solução ficou assim

SELECT categoria.nome AS "Nome dos Cursos" ,
count (curso.categoria_id) AS "quantidade de cursos"
FROM categoria
RIGHT JOIN curso ON curso.categoria_id = categoria_id
GROUP BY 1
ORDER BY categoria.nome DESC
1 resposta

Oiê, tudo certo por aí?

Desde já, peço desculpas pela demora em retornar.

Parabéns pelo desenvolvimento do desafio e por compartilhar com o fórum a sua query!

Contudo, existem alguns pontos que gostaria de comentar:

1 - Para conseguirmos relacionar as tabelas curso e categoria, precisamos indicar no JOIN uma coluna que nos ajuda a conectá-las. Nesse caso, iremos trabalhar com o número identificador de cada curso, representado por id na tabela curso e por curso_id em categoria. Dessa maneira, teremos a seguinte junção:

RIGHT JOIN curso ON curso.categoria_id = categoria.id

2 - Para obter a categoria mais requisitada, precisamos levar em consideração a quantidade de matrículas feitas por estudantes, uma vez que, sabendo o total de inscritos em cada curso, é possível obter a categoria mais requisitada.

Além de relacionar as tabelas curso e categoria, também precisamos relacionar curso com aluno_curso. Assim, conseguiremos obter a quantidade de estudantes inscritos em cada curso e, consequentemente, obter as categorias favoritas de cada aluno. Para isso, usaremos o seguinte comando:

RIGHT JOIN aluno_curso ON aluno_curso.curso_id = curso.id

Acima, estamos relacionando as tabelas aluno_curso e curso a partir do número identificador de cada curso, representado por curso_id e id. Quando ambos os campos forem iguais, significa dizer que determinado aluno está matriculado em um curso específico. Este comando que construímos será adicionado logo abaixo do primeiro JOIN da nossa seleção!

3 - A partir do que desenvolvemos, já podemos modificar o parâmetro da função COUNT, alterando para aluno_curso.aluno_id. Com isso, a contagem irá ocorrer a partir da relação entre alunos e cursos, que está presente na tabela aluno_curso.

4 - Para analisar a categoria mais requisitada, teremos que alterar os apelidos dados às colunas que serão apresentadas na visualização, assim:

SELECT categoria.nome AS "Nome da Categoria" ,
COUNT (aluno_curso.aluno_id) AS "Quantidade de alunos"

Dessa maneira, conseguiremos compreender mais facilmente o objetivo da consulta, pois teremos uma coluna com os nomes das categorias e outra com o resultado da contagem de estudantes por categoria.

5 - Para encontrar de fato a categoria mais requisitada, precisamos ordenar os nossos resultados conforme os números retornados pela função COUNT. Sendo assim, ao invés de utilizarmos categoria.nome como critério de ordenação, usaremos "Quantidade de alunos", chegando no seguinte comando:

ORDER BY "Quantidade de alunos" DESC

6 - Por fim, para coletarmos apenas a categoria mais requisitada, será necessário adicionar um limitador na última linha da nossa query, assim:

LIMIT 1;

A partir da cláusula LIMIT, afirmamos que apenas desejamos visualizar uma linha de todo o resultado da consulta.

Depois dessas alterações, chegaremos no seguinte script SQL:

SELECT categoria.nome AS "Nome da Categoria" ,
    COUNT (aluno_curso.aluno_id) AS "Quantidade de alunos"
FROM categoria
    RIGHT JOIN curso ON curso.categoria_id = categoria.id
    RIGHT JOIN aluno_curso ON aluno_curso.curso_id = curso.id
    GROUP BY 1
    ORDER BY "Quantidade de alunos" DESC
    LIMIT 1;

Assim, conseguiremos visualizar qual é a categoria que os estudantes mais gostam!

Continue sempre estudando e se empenhando. Caso surja alguma dúvida após a nova consulta que construímos ou durante os seus estudos, estarei aqui para te ajudar.

Um forte abraço.