SCRIPT FIREBIRD TOP 5 DE GRUPOS ?

15/11/2017

0

TENHO UMA BANCO DE DADOS COM ALUNOS E NOTAS , PRECISO DO TOP 5 DE CADA MATÉRIA
USANDO APENAS UM SCRIPT SQL :(TABELAS EXEMPLO) [PARECE FÁCIL]

MATÉRIAS :
ID_MATÉRIA
MATÉRIA

NOTAS :
ALUNO
NOTA
NT_MATÉRIA

o MAIS LÓGICO SERIA : (O JOIN ORGANIZA OS ALUNOS E NOTAS DO MAIOR PARA O MENOR E SEPARA 5)

SELECT ALUNO,MATÉRIA,NOTA_MX FROM MATÉRIAS
LEFT JOIN (SELECT FIRST 5 ALUNO,AVG(NOTA) NOTA_MX FROM NOTAS WHERE NT_MATÉRIA=ID_MATÉRIA
GROUP BY ALUNO,NT_MATÉRIA ORDER BY 2 DESC) 0N 1=1

MAS, ID_MATÉRIA DENTRO DO JOIN NÃO É RECONHECIDO , AI TENTARÍAMOS FORA DO JOIN :

SELECT ALUNO,MATÉRIA,NOTA_MX FROM MATÉRIAS
LEFT JOIN (SELECT FIRST 5 ALUNO,AVG(NOTA) NOTA_MX FROM NOTAS
GROUP BY ALUNO,NT_MATÉRIA ORDER BY 2 DESC) ALU ON ALU.NT_MATÉRIA=ID_MATÉRIA

ASSIM NÃO RETORNA DE FORMA CORRETA .

PARA QUEM GOSTA DE DESAFIO, MAS, POR FAVOR, SÓ OPINE DEPOIS DE TESTAR E TER CERTEZA QUE
FUNCIONA, AQUI NÃO CABE ACHISMOS, DEIXE PARA OS PROFISSIONAIS SE NÃO TEM CERTEZA.

ESTE SCRIPT TEM UM APLICAÇÃO GIGANTE : (OS 5 PRODUTOS MAIS VENDIDOS DOS DEPARTAMENTOS,
OS 5 ÚLTIMOS FORNECEDORES COM CUSTO DOS 10 PRODUTOS QUE MAIS VENDE, OS 5 CLIENTES QUE MAIS COMPRARAM
OS 10 PRODUTOS MAIS VENDIDOS ETC.)
Antonio Jesus

Antonio Jesus

Responder

Post mais votado

17/11/2017

Forum não é brinquedo, e não é ferramenta de marketing, por favor moderador apague o post acima, é de uma pessoa inescrupulosa que usa o forum para promover a contravenção.

Antonio Jesus

Antonio Jesus
Responder

Mais Posts

17/11/2017

Antonio Jesus

OLÁ, RESOLVIDO, RESOLVÍ FAZER OUTRA ABORDAGEM, LISTAR OS ALUNOS DA TURMA E AS MATÉRIAS DO CURRÍCULO, E LISTAR OS 5 MELHORES ALUNOS DA MATÉRIA LISTADA, E VERIFICAR SE O ALUNO LISTADO FAZ PARTE DESTES 5 . FUNCIONOU BEM .

SELECT ALUNO,ID_MATERIA,MATÉRIA,(SELECT AVG(NOTA) FROM NOTAS WHERE NT_MATÉRIA=ID_MATERIA ) MEDIA FROM NOTAS NOTARES LEFT JOIN MATERIAS ON
WHERE NOTARES.ALUNO IN (SELECT FIRST 5 ALUNO FROM NOTAS WHERE NOTARES.ID_MATERIA=NOTAS.NT_MATERIA ORDER BY AVG(NOTA) DESC GROUP BY ALUNO )
ID_MATERIA=NX_MATERIA GROUP BY 1,2,3

O SCRIPT ORIGINAL :

SQL.ADD('SELECT MAT_CODIGO,ALU_NOME,');
SQL.ADD('(SELECT AVG(NOT_NOTA/AVA_NOTMAX*100) FROM CAVA LEFT JOIN CNOT ON AVA_SEQUEN=NOT_AVALIA');
SQL.ADD('WHERE NOT_MATRIC=ALU_MATRIC AND AVA_MATERI=TUM_MATERI AND AVA_NOME NOT IN (4,5)) ALU_NOTA');
SQL.ADD('FROM CALU');
SQL.ADD('LEFT JOIN CTUA ON TUA_MATRIC=ALU_MATRIC');
SQL.ADD('LEFT JOIN CTUM ON TUM_TURMA=TUA_TURMA');
SQL.ADD('LEFT JOIN CMAT ON MAT_CODIGO=TUM_MATERI');
SQL.ADD('LEFT JOIN CTUR ON TUR_CODIGO=TUA_TURMA');
SQL.ADD('WHERE TUM_TURMA=:_TUR AND ALU_MATRIC IN (SELECT FIRST :_TOP NOT_MATRIC FROM CNOT');
SQL.ADD('LEFT JOIN CAVA ON AVA_SEQUEN=NOT_AVALIA');
SQL.ADD('WHERE AVA_TURMA=TUM_TURMA AND TUM_MATERI=AVA_MATERI AND AVA_NOME NOT IN (4,5)');
SQL.ADD('GROUP BY AVA_TURMA,AVA_MATERI,NOT_MATRIC');
SQL.ADD('ORDER BY AVG(NOT_NOTA/AVA_NOTMAX*100) )');
SQL.ADD('ORDER BY 1,3 DESC');
Parambyname('_TUR').AsInteger:=ID_TURMA;
Parambyname('_TOP').AsInteger:=5;

GRATO PESSOAL, AGORA É APROVEITAR O CONCEITO DE TOP 5 DOS GRUPOS E CRIAR RELATÓRIOS .
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar