-----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

Responder a