Olá pessoal, eu estou precisando fazer uma consulta em SQL para selecionar o melhor aluno
de um curso e não estou conseguindo, pois aluno e disciplina é um relacionamento n:m.
Será que alguém poderia me dar uma ajuda?
[]'s.
Olá pessoal, eu estou precisando fazer uma consulta em SQL para selecionar o melhor aluno
de um curso e não estou conseguindo, pois aluno e disciplina é um relacionamento n:m.
Será que alguém poderia me dar uma ajuda?
[]'s.
Eu queria fazer uma consulta em SQL dado um curso qual o melhor aluno desse curso,
o aluno que tiver a maior média escolar (notas) nas disciplinas será o melhor aluno do curso.
Eu resumi um pouco a base de dados para caber aqui.
Será que alguém poderia me dar uma ajuda?
[]'s.
O melhor aluno de um curso ou de uma disciplina?
Pergunto por que você não tem aluno vinculado a um curso e sim a disciplinas.
Tem que consultar qual melhor aluno de uma disciplina e depois ver qual curso essa disciplina pertence.
cara,
fiz um consulta, mas deu para testar, mas ve te ajuda
select a.nome, d.nome, max(ad.nota)
from aluno a
join aluno_disciplina ad on (a.idUsuario = ad.idUsuario)
join disciplina d on (ad.idDisciplina = d.idDisciplina)
join curso c on (d.idCurso = c.idCurso)
where c.nome = ?
group by a.nome, d.nome
order by a.nome, d.nome
t+
Olá Alisson e romarcio eu fiz um teste aqui com a consulta
select a.nome, d.nome, max(ad.nota) from aluno a
join aluno_disciplina ad on (a.idUsuario = ad.idUsuario)
join disciplina d on (ad.idDisciplina = d.idDisciplina)
join curso c on (d.idCurso = c.idCurso)
where c.nome = 'Bacharelado em Informática' group by a.nome, d.nome order by a.nome, d.nome;
Porém o MySQL retorna a seguinte mensagem
Unknown column 'a.nome' in 'field list'
Será que vc Alisson e romarcio ou alguém poderia me dar uma ajuda?
[]'s.
rsrs,
to vendo na sua tabela ai e sua tabela aluno nao tem nome, mas vc pode substituir por qualquer coluna na sua tabela.
t+
Na tabela aluno não tem coluna nome. Troca nome por matricula.
Olá Alisson e romarcio eu coloquei um curso que já tenho alunos e disciplinas e notas tudo populado porém a consulta
me retorna apenas os campos matricula, nome e max(ad.nota) sem nenhum resultado
select a.matricula_nusp, d.nome, max(ad.nota) from aluno a
join aluno_disciplina ad on (a.idUsuario = ad.idUsuario)
join disciplina d on (ad.idDisciplina = d.idDisciplina)
join curso c on (d.curso_idcurso = c.idCurso)
where c.nome = 'Bacharelado em Ciência da Computação'
group by a.matricula_nusp, d.nome order by a.matricula_nusp, d.nome;
O que será que está errado com essa consuta que não retorna nenhum resultado apenas os campos em branco?
Será que vc Alisson e Romarcio ou alguém poderia me dar uma ajuda?
[]'s.
cara,
faz assim
select a.matricula_nusp, d.nome, max(ad.nota) from aluno a
join aluno_disciplina ad on (a.idUsuario = ad.idUsuario)
join disciplina d on (ad.idDisciplina = d.idDisciplina)
join curso c on (d.curso_idcurso = c.idCurso)
where lower(c.nome) like 'bacharelado%'
group by a.matricula_nusp, d.nome order by a.matricula_nusp, d.nome;
t+
O nome do curso está correto? Exatamente como o cadastrado no banco?
Olá Alisson e Romarcio o nome estava errado,
Alisson e Romarcio mas pensando no que vocês me falaram
como seria uma consulta para pegar o melhor aluno de uma disciplina,
o aluno que tirou a maior nota na disciplina?
[]'s.
cara,
essa consulta que eu te passei, faz isso, so que vc tem que colocar o nome do aluno na tabela aluno.
t+
vou dar uma sugestão:
select idusuario, avg(nota) as avg_nota
from aluno_disciplina
group by idusuario
order by avg(nota) desc
limit 0,1
Não testei, dá uma olhada aí. Também não lembro a sintaxe do limit, faz tempo que não mexo com mysql.
Edit: as consultas dos outros posts desse tópico, pelo que eu vi, pega a maior nota de cada aluno dentre as disciplinas.
Oi pessoal, na verdade eu estou precisando implementar o seguinte método
public List<Aluno> getMelhorAluno(Integer idDisciplina) throws ExcecaoDAO {
EntityManager em = JPAUtil.getInstance().getEntityManager();
try {
Query query = em.createQuery("Select a.idusuario, max(b.nota) "
+ "from aluno a , aluno_disciplina b where a.idusuario = "
+ "b.idusuario AND b.iddisciplina = " + idDisciplina);
return query.getResultList();
} catch (Exception e) {
throw new ExcecaoDAO(DisciplinaDAO.class.getSimpleName().toString()
+ " :: Erro ao listar os dados!");
} finally {
em.close();
}
}
Porém estou em dúvida na hora de retornar query.getResultList()
pois eu preciso retornar o id do aluno juntamente com a sua nota
e dessa forma com essa consulta eu já consigo pegar o melhor aluno de
uma disciplina.
Será que teria como alguém me dar uma ajdua nesse método?
[]'s.
Essa consulta do último post, creio que vai dar erro, falta o group by. Seria legal colocar o order by também.
Acho que para trazer um único resultado, o getSingleResult resolve seu problema, se não me engano ele vai retornar um array de 2 objetos, em que o primeiro elemento é o id, e o segundo a nota. Se usar o getResultList vai trazer um List de array de objetos.
Tentou usar a consulta que te passei? Não te serviu?