Jump to content
Giovanird

Select Sum em campos separados

Recommended Posts

Olá amigos!
Tenha a seguinte estrutura no banco MySQL
COD   |   PONTOX  |  PONTOY  |  ATLETAX       |  ATLETAY
1         |   0               |  1               |  Maria              |  João
2         |   2               |  0               |  João               |  Maria
3         |   0               |  2               |  Maria              |  João
4         |   7               |  5               |  Maria              |  João
5         |   0               |  3               |  João               |  Maria
6         |   2               |  1               |  João               |  Maria
7         |   0               |  6               |  Maria              |  João
8         |   4               |  0               |  João               |  Maria

 

Preciso de ajuda para somar quantos pontos fez o atleta João nos últimos 5 torneios (COD 8, 7, 6, 5 e 4)  Há momento que o João jogou em X e outro momento em Y.
Abaixo segue meu Select, onde a soma dos pontos deve ser 17.

 

nomeatleta = "João"
Set soma= banco.execute("SELECT sum(PONTOX ) AS somax,  sum(PONTOY ) AS somay FROM (select cod, pontox, pontoy, atletax, atletay  from torneios where (atletax like '"&nomeatleta&"' or atletay like '"&nomeatleta&"') order by cod desc limit 5) AS temp")

 

Share this post


Link to post
Share on other sites
Em 20/06/2020 at 23:02, Giovanird disse:

Olá amigos!
Tenha a seguinte estrutura no banco MySQL
COD   |   PONTOX  |  PONTOY  |  ATLETAX       |  ATLETAY
1         |   0               |  1               |  Maria              |  João
2         |   2               |  0               |  João               |  Maria
3         |   0               |  2               |  Maria              |  João
4         |   7               |  5               |  Maria              |  João
5         |   0               |  3               |  João               |  Maria
6         |   2               |  1               |  João               |  Maria
7         |   0               |  6               |  Maria              |  João
8         |   4               |  0               |  João               |  Maria

 

Preciso de ajuda para somar quantos pontos fez o atleta João nos últimos 5 torneios (COD 8, 7, 6, 5 e 4)  Há momento que o João jogou em X e outro momento em Y.
Abaixo segue meu Select, onde a soma dos pontos deve ser 17.

 

nomeatleta = "João"
Set soma= banco.execute("SELECT sum(PONTOX ) AS somax,  sum(PONTOY ) AS somay FROM (select cod, pontox, pontoy, atletax, atletay  from torneios where (atletax like '"&nomeatleta&"' or atletay like '"&nomeatleta&"') order by cod desc limit 5) AS temp")

 

 

 

Se o objetivo é fazer uma somatória por coluna x  referente ao pontox, coluna y referente ao pontoy faria dessa forma:

SELECT (SELECT SUM(PONTOX) FROM TORNEIOS WHERE ATLETAX='João') as SOMATORIAX,
(SELECT SUM(PONTOY) FROM TORNEIOS WHERE ATLETAY='João') as SOMATORIAY

 

Se quiser testar online > SQL Fiddle

 

Share this post


Link to post
Share on other sites

Outra solução por union 

 

select atleta,sum(ponto) pontos
from
(
select atletax atleta,pontox ponto
from torneios 
union all
select atletay atleta,pontoy ponto
from torneios 
) virtual_pts
where atleta = 'João'
group by atleta 

 

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 DuduBacteria
      Tenho uma Tabela chamada "VENDAS" com os seguintes atributos:
       
       
      Eu quero retornar em MySQL o total de vendas ocorridos durante 1 semana, entre o dia atual até seis dias atrás.
       
      Ficando mais ou menos assim:
       
      SEMANA              TOTAL DE VENDIDO segunda                250.00 domingo                430.00 sábado                 160.50 sexta                  300.03 quinta                 300.03 quarta                 300.03 terça                  300.03
    • By joagostini
      Olá, sou iniciante, e estou fazendo, como exercício, o jogo da velha. 'Desenvolvi' uma rotina de escolha de nível do jogo (serão 3 níveis) que deve aguardar a escolha do usuário para o programa prosseguir. Mas acho que não entendi direito como o javascript funciona, pois o que fiz não funciona e não encontrei uma solução (talvez não saíba como pesquisar corretamente o assunto na web).

      O começo do HTML (que é pouco) onde está um select para escolha do nível é este:
      <body>     <div id="dvmenu">         <button onclick="iniciar()">Iniciar Jogo</button>         <p><br></p>         <div id="dvQuemComeca">             <label for="nivel">Escolha o nivel:</label>             <select id="nivel" onChange='atualiza()'>                 <option value=0 selected>Escolha um nível</option>                 <option value=1>Nível 1 - Brincadeira</option>                 <option value=2>Nivel 2 - Surpresa</option>                 <option value=3>Nível 3 - Desafio</option>             </select>         </div>         <div id="jogador" class="jogador"></div>         <div id="vencedor" class="jogador"></div>     </div>  
      O código JS é este:
      //INÍCIO VEM DE LOAD function iniciar() {     casela = document.querySelectorAll('div[id^="p"]');     for (let cas of casela) {         cas.innerHTML = '';     }     for (let i = 0; i < 9; i++){        tab = tab;     }     console.log(tab);     nivel = 0;      msg = '';     qtosLancesJog = 0;     sorteiaJogador();     //até aqui funcionou direito } //-------------------------------------------------------------------- //ESCOLHA DO NÍVEL DO JOGO function atualiza(){     let selecao = document.querySelector('#nivel');     let opcao = selecao.options[selecao.selectedIndex];     return opcao.value;    }   //--------------------------------------------------------------------   //SORTEIA QUEM VAI COMEÇAR JOGANDO //função para definir o jogador que inicia o tab function sorteiaJogador() {//funcionou direito     let quemComeca = parseInt(Math.floor(Math.random() * 2));     if (quemComeca == 0) {         msg = 'Computador';         //setTimeout(lanceCpu, 2000);//dá um intervalo antes do computador realizar o 1 lance         lanceCpu();     } else msg = 'Humano';//neste caso a rotina espera que o jogador clique no tabuleiro, qdo roda a função lancetab(pos)         lanceHumano();     document.querySelector('#jogador').innerHTML = `<br>O ${msg} começa!`; } //--------------------------------------------------------------------   //ESCOLHA RANDÔMICA, NIVEL = 1, Da POSIÇÃO DO LANCE DA CPU NO tabULEIRO function jogouCpu(){//funcionou direito //nível 1 modo randômico pos = Math.floor(Math.random() * 9); return pos; }   //função humana function lanceHumano(){     console.log('Estou na função humana');     do {         nivel = atualiza();         console.log(nivel);     } while (nivel === 0);     console.log(nivel + ' passei direto'); }  
      O problema está nesse do...while da function lanceHumano(). Segundo entendi, ele prosseguiria apenas quando nivel!== 0, caso contrário, ficaria 'preso' até o momento que o usuário escolhesse uma das opções. Pelo HTML percebesse que setei o select para value=0. Mas ele nem se dá ao trabalho de esperar um miléssimo de segundo, segue em frente com o valor que tiver, no caso 0. O while  não tem efeito. Essa minha perspectiva está errada? Se sim, o que fazer? (paradigma funcional, await?) Obrigado.
      P.S.. No código tem uns conole.logs que servem watch-dogs para ajudar a entender por onde vão as rotinas.
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
    • By Thiago Btos
      Boa tarde pessoal.
       
      Estou travado em uma parte do select do qual preciso somar os valores de todos os registros da coluna, e usa-lo como base de calculo para outra coluna
       
      SELECT PRODUTO, HORAS, QTDE, VARIACAO FROM DUAL
       
      Meu select está retornando algo assim:
       
      PRODUTO | HORAS | QTDE | VARIACAO
            A           |    2        |    20    |      5
            B           |    6        |    25    |      3
            C           |    5        |    70    |      9
            D           |    8        |    30    |      2
      --------------------------------------------------------
      Total           |    21     |  145    |      
       
      Preciso criar uma nova coluna com a formula (Total Qtde / Total horas) * variação ficando assim:
      PRODUTO | HORAS | QTDE | VARIACAO | CONTA
            A           |    2        |    20    |      5             |  34.52
            B           |    6        |    25    |      3             |  20.71
            C           |    5        |    70    |      9             |  62.14
            D           |    8        |    30    |      2             |  13.80
       
       
      A forma que estou tentando fazer é via subselect, mas ele não agrupa todas as linhas, e somente o registro da linha atual.
      SELECT PRODUTO, HORAS, QTDE, VARIACAO,
          (SELECT (SUM(QTDE) / SUM(HORAS)) * VARIACAO) AS CONTA
      FROM DUAL
       
      Dessa forma me retorna o seguinte resultado, como se estive calculando somente a linha atual e não toda a coluna.
      PRODUTO | HORAS | QTDE | VARIACAO | CONTA
            A           |    2        |    20    |      5             |  50
            B           |    6        |    25    |      3             |  12.5
            C           |    5        |    70    |      9             |  126
            D           |    8        |    30    |      2             |  7.5
       
       
       
      Espero que eu tenha conseguido explicar minha necessidade de forma que de para entender.
       
    • By Kefatif
      Prezados, boa tarde.
       
      Estou com uma dúvida:
       
      Estou precisando trazer dados do banco para uma tela de edição de cadastro, até aí tudo bem consegui fazer para os input através do código abaixo:
       
      <label style="width:16%;margin-left: 2%;">Data de Início<br> <input type="date" value="<?php echo $row["DATA_DISPENSACAO"] ?>" class="form-control" style="width:100%;"> </label>  
      Mas o meu select já traz o controle de peso do banco, eu gostaria que além dele trazer esses pesos que traga o salvo no cadastro de uma pessoa para visualização e edição.
       
      Segue abaixo o código do select como está:
       
      <label style="width:15%">Peso<b style="color:red">*</b><br> <select name="peso" class="form-control" required style="width:100%" value="<?php echo $row["DATA_TESTE"] ?>"> <option value="">Selecione</option> <?php $sqlpeso = "select distinct PESO from TESTE where ID_ESQUEMA = ".$row["ID_ESQUEMA"]; $resultpeso = mysqli_query($con, $sqlpeso); while ($rowpeso= mysqli_fetch_array($resultpeso)){ ?> <option value="<?php echo utf8_encode($rowpeso["PESO"]);?>" ><?php echo utf8_encode($rowpeso["PESO"]); ?></option> <?php } ?> </select> </label>  
      Meu banco é MYSQL.
       
      Agradeço desde já a todos pela ajuda.
       
      Abraço!
×

Important Information

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