Olá a todos!
Tenho uma tabela com os campos (id_aluno, disciplina, nota). Preciso listar o id_aluno que teve a menor nota em cada uma das disciplinas, ou seja, deve aparecer somente um aluno por disciplina…
O problema é que o group by exige a declaração do id_aluno e se eu tirá-lo não terei a informação do aluno na listagem.
db: Postgresql
Abraço
Baca
Eu posso te agradecer pela sua pergunta.
Este é meio que um problema que vira e mexe aparece e nunca tinha encontrado uma boa solução para isso.
Graças a sua pergunta, me motivei a procurar algo melhor e achei a solução abaixo nesse link:
SELECT DISTINCT ON (disciplina)
disciplina, nota, id_aluno
FROM notas
ORDER BY disciplina, nota desc
Repare que esse DISTINCT ON só funciona no Postgresql
Ah, e seria uma boa idéia criar o indice abaixo na sua tabela:
create index ix_notas_disciplina_nota on notas(disciplina, nota desc);
Eu é que agradeço Abel, pois, essa também não foi a primeira vez que me deparei com esse problema e, embora já tivesse procurado na net, não havia encontrado essa sua ótima solução. Parabéns e obrigado!!
[]s
Baca