Jump to content
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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Hashira do Vento
      O exercício pede o que eu faça um código com uma matriz, onde eu peça uma linha qualquer ao usuário, e nela será feito a soma ou média dos elementos contidos.
      O problema é na hora da decisão do usuário na hora de escolher entre média ou soma, escrevendo a letra inicial de uma dessa palavras em maiúsculo. O "If" simplesmente não funciona, e eu acho que seja essa minha dificuldade, pois quando tirei o if, a soma funcionou normalmente (com o código atual a soma fica igual a zero no printf final). E sim, eu pesquisei a fundo sobre o tipo char, mas mesmo assim não consegui resposta alguma para a solução do meu problema :/
      Segue o código:
      Obs: Claramente, o meu código não está terminado (ainda falta pôr a parte da média), a partir do momento em que eu solucionar esse problema principal, creio que conseguirei finalizá-lo sem mais contratempos.
       
      #include <stdio.h> #include <stdlib.h> #include <locale> int main (void){ setlocale (LC_ALL, "Portuguese"); float M [2][2], media; int lin, x, soma1, soma2; char op[5]; printf ("Preencha a matriz: \n"); for (int l = 0; l<2; l++) { //linha for (int c = 0; c<2; c++ ) { //coluna scanf ("%f", &M[l][c]); } } printf ("Que operação você quer? S ou M?\n"); //Entrada do char, escolha da operação scanf ("%s", op); printf ("Em qual linha da matriz a operação deve ser realizada?\n"); scanf ("%d", &x); for (int l = x; l==x; l++) { for (int c = 0; c<2; c++ ){ printf ("%f \n", M[l][c]);//só mostrando os numeros da linha (ignore) if (op=="S") //tenho quase certeza que o problema se encontra aqui soma1= M[l][c]+soma1; } } printf ("O resultado da soma deu %d", soma1); //e na hora de mostrar a soma, ela sempre aparece como zero }
    • By eliezertradutor
      Pessoal estou com problemas ao fazer um programa para calcular a media de duas notas. Segue o codigo:

      int main(int argc, char *argv[]) {
          float nota1,nota2, media;
          printf ("Digite a primeira nota");
          scanf ("%d", &nota1);
          do {
              printf ("digite 1 como nota\n");
              scanf ("%d", &nota1);
          } while (nota1==0);
          if (nota1 !=0)
          {
              printf ("digite a nota 2\n");
              scanf ("%d", &nota2);
              
          }
              media=(nota1+nota2)/2;
              printf ("a media eh %d.2\n ",media);
          return 0;
          
          
          
      }
      Ele compila legal e roda. Só que aparece a mensgem "Digite 1 como nota que só deveria aparecer quando o usuário digitasse 0 (Zero).
        a ideia é que o usuario nunca possa registrar zero como nota, no minimo 1.
    • By 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
    • By 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?
       
    • By 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");
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.