Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Minha Solução

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;
5 respostas
solução!

Olá, Jackson, tudo bem?

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

Continue assim e bons estudos!

Boa tarde colegas! A minha também ficou dessa maneira ai! Tenho uma dúvida, no trecho JOIN curso ON curso.categoria_id = categoria.id faz diferença a ordem do que está após o ON, por exemplo, testei assim e funcionou: JOIN curso ON categoria.id = curso.categoria_id Tanto faz ou pode ter problemas dependendo do caso?

Até onde vi não faz diferença ja que ele esta percorrendo as duas listas e fazendo a comparacao independentemente da ordem no parametro.

Oi colegas!

O meu ficou um pouco diferente mais testando a de você cheguei no mesmo resultado.

 -- Categoria mais requisitada
  select 
      cg.nome as "Categoria"
  ,    count (ac.aluno_id) "Qtde Alunos"
  from categoria cg
  right join curso c on cg.id = c.categoria_id 
  right join aluno_curso ac on c.id = ac.curso_id 
  group by 1
  order by "Qtde Alunos" DESC
 ; 

Será que tem problema eu ter contado os alunos e não os cursos de aluno_curso? Acho que estamos contando a qtde de relacionamentos, então não faria diferença, mas estou insegura.

Também ainda não entendi direito quando usamos join ou right join ou left join...

Nesse caso, talvez por causa da ordem, right join funcionou, mas se eu estiver fazendo errado queria saber para não errar na vida real.

O join pega tudos os itens que batem com o parametro, exemplo: select * from 'tabela1' join 'tabela2' on tabela1.id = tabela2.id ira retornar uma nova tabela com os atributos das duas tabela onde os id de ambas as tabelas forem iguais.

Já o left join faz a mesma coisa que o join mas ele tambem pega os dados da 'tabela1' que não são iguais ao parametro.

O right faz a mesma coisa só que com a 'tabela2'.

Deixei uma imagem mostrando melhor como funciona os Join's. O vermelho sera os dados que viram para você:Insira aqui a descrição dessa imagem para ajudar na acessibilidade