Jump to content
adrianno

[Resolvido] MYSQL Subquerys para somar o mesmo campo com várias condições

Recommended Posts

Boa noite, tenho a seguinte questão, tenho uma tabela com  campo  "valor"  que guarda um valor monetário e campo "data" com a data do lançamento e um campo "tipo" marcando se é entrada ou saida,  ao cadastrar um valor, coloco a data e qual tipo "entrada" ou "saida"    quero montar uma view que soma todos os valores por mês, separados por tipo, se é entrada ou saida.   A seguinte query me tras a soma, porém não agrupa pelo MES/ANO

SELECT                                   
    DATE_FORMAT(data, "%m/%Y") as MES,     
      (select Sum(valor) from controle WHERE tipo = 'SAIDA' ) as VS, // soma tudo que for SAIDA
      (select Sum(valor) from controle WHERE tipo = 'ENTRADA' ) as VE // soma tudo que for ENTRADA
             FROM controle 
              GROUP BY YEAR(data), MONTH(data)   // agrupa por ANO/MES  mas este grupo nao opera nas somas dos valores
               ORDER BY data DESC

 Esta query  somas os valores  mas não filtra pelo mes/ano e tras a soma total de tudo ignorando o mes,  mostra o mesmo valor total de cada tipo em todos os meses:
EXEMPLO DO RESULTADO
MES                 VS(saida)     VE(entrada)

06/2020         4600,00        9750,00
05/2020         4600,00        9750,00

04/2020         4600,00        9750,00

 

Na prática cada mês deveria retornar as somas dos valores apenas dele. Como fazer com que  GROUP BY YEAR(data), MONTH(data)   tenha efeito correto em cada tipo?   

Share this post


Link to post
Share on other sites

Creio que seria isto ,

 

SELECT                                   
DATE_FORMAT(data, "%m/%Y") as MES,     
Sum(case when tipo = 'SAIDA' then valor else 0 end) SAIDA,
Sum(case when tipo = 'ENTRADA' then valor else 0 end) ENTRADA,
FROM controle
GROUP BY DATE_FORMAT(data, "%m/%Y")
ORDER BY data DESC

para mais detalhes pesquise por "pivot" em mysql.

Share this post


Link to post
Share on other sites
33 minutos atrás, Motta disse:

Creio que seria isto ,

 


SELECT                                   
DATE_FORMAT(data, "%m/%Y") as MES,     
Sum(case when tipo = 'SAIDA' then valor else 0 end) SAIDA,
Sum(case when tipo = 'ENTRADA' then valor else 0 end) ENTRADA,
FROM controle
GROUP BY DATE_FORMAT(data, "%m/%Y")
ORDER BY data DESC

para mais detalhes pesquise por "pivot" em mysql.

Opa, vou testar logo mais! obrigado

Share this post


Link to post
Share on other sites
1 hora atrás, Motta disse:

Creio que seria isto ,

 


SELECT                                   
DATE_FORMAT(data, "%m/%Y") as MES,     
Sum(case when tipo = 'SAIDA' then valor else 0 end) SAIDA,
Sum(case when tipo = 'ENTRADA' then valor else 0 end) ENTRADA,
FROM controle
GROUP BY DATE_FORMAT(data, "%m/%Y")
ORDER BY data DESC

para mais detalhes pesquise por "pivot" em mysql.

 

Deu certinho amigo, resolveu aqui, obrigado!

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 Sapinn
      Estou trazendo os dados do banco de dados e eles estão vindo com problema na acentuação
      uso o seguinte codigo no php
      <?php
      include_once ‘…/php/conexao.php’;
      header(‘Content-Type: text/html; charset=utf-8’);
      mysqli_query($conn,“SET NAMES ‘utf8’”);
      mysqli_query($conn,‘SET character_set_connection=utf8’);
      mysqli_query($conn,‘SET character_set_client=utf8’);
      mysqli_query($conn,‘SET character_set_results=utf8’);
      ?>
      E no html
      Mesmo assim as palavras com acento ficam com aquele erro desgraçado com a interrogação
      Alguem me ajuda ai
    • By Sapinn
      Tenho um form que pergunto o nome, sobrenome, email, idade e telefone de contato. Como faço para verificar se o email digitado já foi cadastrado e retorna na mesma pagina uma mensagem caso ele ja existe ou prosseguir para a area do usuario caso ele não exista sem da refresh na página.
    • By Wanderson Moreira
      bom dia, 

      preciso fazer um select e verificar se o ID do usuário logado existe em em uma coluna do banco de dados
      por exemplo

      ID Usuario: 6
      coluna do banco: 1, 3, 5, 16
       
      O problema é que se eu fizer o select com LIKE ele considera o numero 16 como 1 e 6 invés de considerar um numero só, com isso o usuário 6 acaba sendo incluso no select indevidamente
       
      alguém poderia me ajudar?
    • By Diego-SLP
      Boa tarde,
       
      Tenho um while retornando alguns dados do meu banco e gostaria que nessa tabela a ultima linha fosse a soma da coluna, como posso fazer isso ?
       
      Obrigado
    • By gersonab
      Bom dia, tenho 2 tabelas editáveis em uma div, estas funcionam normalmente, o problema é que o loop não acontece , só carrega sobre 1 item, sendo que este eu posso ter mais itens.
       na página principal tenho:
      <div class="carregadados"></div> function fetch_data() { $.ajax({ url:"../lista/finan.php", method:"POST", success:function(data){ $('.carregadados').html(data); } }); } fetch_data(); a página a ser carregada esta assim:
      <?php session_start(); require_once('config.php'); $output = ''; $idc1=$_SESSION['idc']; $sql01 = "SELECT * FROM porcent WHERE idfcli='$idc1'"; $result = mysqli_query($con, $sql01); while($user41 = mysqli_fetch_array($result)){ // primeiro while onde seleciono os itens da pessoa podendo ter vários $output .= ' <div class="table-responsive mb-4 mt-4"> Aqui vem os dados da pessoa '; $id1= $user41["idproc"]; $sqladv = "SELECT * FROM poradv WHERE procav='$id1'"; $resulta = mysqli_query($con, $sqladv); $output .= ' <table class="table table-bordered table-hover table-striped" style="width:100%"> <thead> <tr> </tr> </thead> <tbody>'; if(mysqli_num_rows($resulta) > 0) { while($usera = mysqli_fetch_array($resulta)){ //segundo while onde tenho os dados de venda em uma tabela editavel $output .= ' <tr> </tr>'; } $output .= ' <tr> // insiro linhas caso precise </tr> '; } else { $output .= '<tr> // caso não tenha nada inserido, posso fazer por aqui </tr> '; } $output .= '</tbody> </table>'; $id2= $user41["idproc"]; $sql = "SELECT * FROM parcelas WHERE procid='$id2' ORDER BY datapar, idpar ASC"; $result = mysqli_query($con, $sql); $output .= ' <table class="table table-bordered table-hover table-striped" style="width:100%"> <thead> <tr> // tabela de pagamentos editavel </tr> </thead> <tbody>'; if(mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_array($result)) { //terceiro while , tabela referente a pagamentos $output .= ' <tr> // tabela pagamentos </tr>'; } $output .= ' <tr> // insiro linhas caso precise </tr> '; } else { $output .= '<tr> // caso não tenha nada inserido, posso fazer por aqui </tr> '; } $output .= '</tbody> </table> </div> '; } echo $output; ?> só esta carregando uma vez , tudo dentro da parte editável esta funcionando, porém no primeiro while só faz 1 loop, os demais estão funcionando perfeitamente.
      desde já agradeço qualquer ajuda.
×

Important Information

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