-----Mensagem original----- > Já fiz algumas outras funções mas estou com dificuldade em trabalhar com > laços e resultados de consultas dentro da função > > Exemplo, selecionar todas as notas de uma turma, e para cada aluno fazer a > media dele, e depois ao final a media da turma...
>Talvez porque você esteja utilizando um martelo para pregar um parafuso. >Se o seu problema for um parafuso, a sua chave-de-fenda seria o SQL. >A maioria dos desenvolvedores acabam pensando na resolução dos problema >de maneira imperativa, mas quando você tem em sua mala de ferramentas >outros paradigmas é possível abrir mão dos 'for/while/if' e partir para >uma linguagem declarativa onde não importa "como" você quer e sim "o >quê" você quer. >Não sei quais são os padrões de trabalho que são impostos para você >nesta sua tarefa, entretanto, uma excelente alternativa seria utilizar >SQL. >Isto é um exemplo de algo que poderia funcionar para você: >alunos >------ >cod nome >1 JOAO >2 PEDRO >3 MARIA >4 MARCIA >turmas >------ >sigla nome >POR PORTUGUES >MAT MATEMATICA >alunos_matriculados >------------------- >cod_aluno sigla_turma >1 POR >2 POR >3 POR >1 MAT >2 MAT >3 MAT >4 MAT >notas >----- >prova cod_aluno sigla_turma valor >1 1 POR 10 >1 2 POR 7 >1 3 POR 9 >2 1 POR 8 >2 2 POR 8 >2 3 POR 10 >1 1 MAT 6 >1 2 MAT 7 >1 3 MAT 8 >1 4 MAT 8 >Uma consulta que poderia trazer alguns dados interessantes seria: >--- >select > aluno.nome, > turma.nome, > nota.prova, > avg(nota.valor) as media, > max(nota.valor) as maior_nota_turma, > min(nota.valor) as menor_nota_turma >from alunos_matriculados >join alunos aluno > on (alunos_matriculados.cod_aluno = aluno.cod) >join turmas turma > on (alunos_matriculados.sigla_turma = turma.sigla) >join notas nota using (cod_aluno, sigla_turma) >group by aluno.nome, turma.nome, nota.prova; >--- >Faça uns testes com SQL antes de partir para uma solução imperativa e >você terá menos problemas. >Veja que você poder fazer um laço no resultado dessa consulta [1] se >quiser. > [1] >http://www.postgresql.org/docs/current/static/plpgsql-control->structures.h tml#PLPGSQL-RECORDS-ITERATING >[]s >-- Dickson Agradeço sua ajuda, já ate utilizo este tipo de SQL para relatórios de ano atual, mas meu sistema é multi escola e multi anual, tenho escolas que já tem arquivados dados de 8, 10 anos Consistir em bancos essas medias, seria interessante pois não teria que refazer estes cálculos toda chamada principalmente de gráficos... Trabalho com flags de situação das turmas e matriculas para gerar como um arquivo eletrônico dos resultados finais somente Por isso queria usar as funções par tirar da aplicação os cálculos, usando ou triggers ou fuctions Desculpe minha ignorância se estiver explanando besteiras... Obrigado(a), _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
