Ir para conteúdo
Greatfi

Média com exclusões

Recommended Posts

Olá pessoal, estou tentando fazer um script aqui, mas estou travado.

 

Trata-se de uma média final escolar onde existem 4 unidades e 2 recuperações.

 

(N1 + N2 + N3 + N4) / 4

R1 - Recuperação 1 pode substituir N1 ou N2

R2 - Recuperação 2 pode substituir qualquer N

 

Exemplo:

N1 = 6,0

N2 = 7,8

N3 = 6,5

N4 = 8,0

R1 = 6,4

R2 = 8,5

 

(8,5 + 7,8 + 6,5 + 8,0) / 4 = 7,7

 

No caso o N1 original foi substituído por R1 e posteriormente o R1 foi substituído por R2, pois ainda continuou sendo a nota mais baixa.

Os dados ficam todos numa mesma linha na tabela, ou seja para exibir as notas seria algo como:

 

SELECT N1,N2,N3,N4,R1,R2 FROM NOTA;

 

O que preciso é apenas a média final, então acredito o mais simples seria fazer uma média descartando os 2 menores valores, no entanto não consegui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde ! Espero ter entendido sua pergunta. Já tentou usar CASE WHEN ? 

 

Ficaria mais ou menos assim :

SELECT CASE   WHEN N1 > R1 THEN N1
              WHEN N1 < R1 AND R1 > R2 THEN R1
              WHEN N1 < R1 AND R1 < R2 THEN R2
             END AS N1,
        CASE  WHEN N2 > R1 THEN N2
              WHEN N2 < R1 AND R1 > R2 THEN R1
              WHEN N2 < R1 AND R1 < R2 THEN R2
             END AS N2,
        CASE  WHEN N3 > R1 THEN N3
              WHEN N3 < R1 AND R1 > R2 THEN R1
              WHEN N3 < R1 AND R1 < R2 THEN R2
             END AS N3,
        CASE  WHEN N4 > R1 THEN N4
              WHEN N4 < R1 AND R1 > R2 THEN R1
              WHEN N4 < R1 AND R1 < R2 THEN R2
             END AS N4
        INTO #Temp -- Insere em uma tabela temporária os novos valores
        FROM NOTA
        
        -- Realiza a média
        SELECT (N1 + N2 + N3 + N4) / 4 as Media
            FROM #Temp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por jonata paulino
      Eu tenho 4 colunas com valores numéricos e gostaria de tirar a média linha por linha dessas colunas e criar uma nova com essas médias.
      Obrigado
    • Por EliseuFirmino
      Bom dia pessoal!
       
      Tenho a seguinte consulta: 
       
      SELECT
          to_char(a.dt_entrada,'yyyy') ano,
          COUNT(A.NR_ATENDIMENTO) total_atendimento,
          COUNT(A.NR_ATENDIMENTO)/12 media

      FROM TASY.ATENDIMENTOS_V A
      WHERE decode(upper(:tp_data), 'E', a.dt_entrada, 'A', a.dt_alta)  BETWEEN :DT_INICIAL AND TASY.FIM_DIA(:DT_FINAL)
      and a.dt_cancelamento is null
      and a.cd_setor_atendimento in (126,130, 132, 29)
      and to_number(a.cd_estabelecimento) = 1
      group by to_char(a.dt_entrada,'yyyy')
      order by 1 desc
       
      Com o seguinte retorno:
      ano       total_atendimento                    media
      2018              21570                                1797,5
      2017              21369                                1780,75
      2016              16469                                1372,41666666667
      2015              10736                                894,666666666667
       
      Nela vejo a média de atendimentos em casa ano. Numa consulta de 1 de jan de 2015 até 31 de dez de 2017, tudo funciona normalmente. Mas se eu colocar por exemplo de 1 de jan de 2015 até  30 de set de 2018, tenho um problema. Deveria dividir por 9 e não por 12.
      Alguém saberia me indicar como devo realizar esta consulta de forma a calcular os meses que estão no período indicado, com quebra por ano?
       
    • Por 555545asasasa
      Alguem podia fazer um pequeno codigo de uma Media Ponderada em PHP, com datas ?
       
      $date1 = strtotime("12/16/2016");
      $date2 = strtotime("12/23/2016");
      $date3 = strtotime("01/01/2017");
    • Por darthmagus
      Escreva um programa que calcule a média dos números digitados pelo usuário, se eles forem pares. O programa deve terminar a leitura se o usuário digitar zero.
       
      Isso foi o que fiz até agora, mas não deu muito certo:
       
        main(void){
              setlocale(LC_ALL,"Portuguese");
              int n1, n2, n3;
              float media;
              int i;
              printf("Digite o 1º número: ");
              scanf("%d", &n1);
              printf("Digite o 2º número: ");
              scanf("%d", &n2);
              printf("Digite o 3º número: ");
              scanf("%d", &n3);
              while (n1%2 ==0 && n2%2 ==0 && n3%2 == 0) {
                  media = (n1 + n2 + n3)
              }
              printf("%d", media);
          return 0;
          system ("pause");
      }
       
    • Por rickbonini
      Olá, meu nome é Henrique, sou iniciante na área de programação e estou começando a fazer uns projetos simples no javascript, só pratica mesmo. Estou tentando fazer o exemplo clássico de tirar a média do aluno, pra mim , de novo iniciante na área, parece tudo certo, mas quando vou executar dá erro. Olhem e me dizem o que não estou vendo :) 
       
      alunos = []                  for (i=1; i<=1; i++) {             nome = prompt("Digite o nome do aluno.");             nota1 = parseInt(prompt("Digite a primeira nota do aluno " + nome));             nota2 = parseInt(prompt("Digite a segunda nota do aluno " + nome));             aluno = {                 nomes: nome,                 notas1: nota1,                 notas2: nota2,                 media: 0,                 situacao: ""             }             alunos.push(aluno)         }         for (i=0; i<alunos.length; i++){             alunos.media = (alunos.notas1 + alunos.notas2) / 2         }         media_all_alunos = 0;         for (i=0; i<alunos.length; i++) {             media_all_alunos = media_all_alunos + alunos.media         }             media_real = media_all_alunos / alunos.length             document.write("A média da classe: " + media_real + "<br>")         if (alunos.media>=6){             situacao = "Aprovado"         }         else if (alunos.media<=4){             situacao = "Reprovado"         }         else{             situacao = "Recuperação"         }         alunos.situacao = situacao           document.write("Aluno: " + alunos.nomes + "<br>");         document.write("1ª Nota:  " + alunos.notas1 + "<br>");         document.write("2ª Nota:  " + alunos.notas2 +  "<br>");         document.write("Média:  " + alunos.media + "<br>")         document.write("===================================================== <br>")                  alunos_Aprovado = 0;         alunos_Reprovado = 0;         alunos_rec = 0;         for (i=0; i<alunos.length; i++){             if (alunos.situacao == "Aprovado") {                 alunos_Aprovado = alunos_Aprovado + 1             }             else if (alunos.situacao == "Reprovado") {                 alunos_Reprovado = alunos_Reprovado + 1             }             else {                 alunos_rec = alunos_rec + 1             }         }         document.write("Alunos Aprovados: " + alunos_Aprovado + "<br>")         document.write("Alunos Reprovados: " + alunos_Reprovado + "<br>")         document.write("Alunos em Recuperação: " + alunos_rec + "<br>")  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.