devdenis Postado Julho 30, 2014 Denunciar Share Postado Julho 30, 2014 Boa Noite a todos. Meu código precisa fazer um somatório, mais está somando apenas quando o valor='8'. valor='4' está retornando a mesma soma de valor='8' EXEMPLO: Temos as tabelas linhas e passageiros. Código para somatório: Sendo 8= inteiros 4= meios <?php $sql_sum = "SELECT linhas.id, SUM(passageiro.mensalidade='8') AS inteiros_conv, SUM(passageiro.mensalidade) AS num_inteiros_conv, SUM(passageiro.mensalidade='4') AS meios_conv, SUM(passageiro.mensalidade) AS num_meios_conv FROM passageiro, linhas WHERE (passageiro.situacao='AT' OR passageiro.situacao='CO') AND passageiro.linha_ida=linhas.id AND passageiro.linha_volta=linhas.id GROUP BY linhas.id"; $consulta_sumario = mysql_query($sql_sum); echo '<center><table class="table_relatorio_seguro"> <div class="vermelho" style="text-transform:uppercase;"> Relatório de Cálculo Sumário<br /><br /></div>'; echo '<tr class="table_relatorio_seguro">'; echo '<td class="vermelho" ><center>Linha</center></td>'; echo '<td class="vermelho" ><center>Inteiros Conv</center></td>'; echo '<td class="vermelho" ><center>Num Inteiros Conv.</center></td>'; echo '<td class="vermelho" ><center>Meios Conv</center></td>'; echo '<td class="vermelho" ><center>Num Meios Conv</center></td>'; echo '</tr>'; while($registro_sum = mysql_fetch_assoc($consulta_sumario)){ echo '<tr class="table_relatorio_seguro">'; echo '<td><center>'.$registro_sum["id"].'</center></td>'; echo '<td><center>'.$registro_sum["inteiros_conv"].'</center></td>'; echo '<td><center>'.$registro_sum["num_inteiros_conv"].'</center></td>'; echo '<td><center>'.$registro_sum["meios_conv"].'</center></td>'; echo '<td><center>'.$registro_sum["num_meios_conv"].'</center></td>'; echo '</tr>'; } echo '</table></center>'; ?> Os INTEIROS CONV e os NUM INTEIROS CONV estão corretos. Já os MEIOS CONV estão resultando 'zero' e os NUM MEIOS CONV estão repetindo a soma com valor='8' e não com valor='4'. RESULTADO QUE ESTOU OBTENDO: Agradeço desde já qualquer ajuda pois está complicado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Julho 31, 2014 Denunciar Share Postado Julho 31, 2014 faça assim:select linha, sum(if(mensalidade=8,1,0)) as qt_inteiros, sum(if(mensalidade=8, mensalidade,0)) as soma_inteiros, sum(if(mensalidade=4,1,0)) as qt_meios, sum(if(mensalidade=4, mensalidade,0)) as soma_meios from minhatabela group by linha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 devdenis Postado Julho 31, 2014 Autor Denunciar Share Postado Julho 31, 2014 Obrigado pela resposta Denis, e belo nome rs ! Bom eu adaptei o seu exemplo e funcionou, mais ainda não consegui todos resultados. Dessa maneira esta somando corretamente apenas os MEIOS, ou seja, mensalidade=4: $sql_sum = "SELECT linhas.id, SUM(if(mensalidade=8,1,0)) as qt_inteiros, SUM(if(mensalidade=8, mensalidade,0)) as soma_inteiros, sum(if(mensalidade=4,1,0)) as qt_meios, SUM(if(mensalidade=4, mensalidade,0)) as soma_meios FROM passageiro, linhas WHERE(passageiro.situacao='AT' OR passageiro.situacao='CO') AND passageiro.linha_ida=linhas.id GROUP BY linhas.id"; RESULTADO: E acrescentando passageiro.linha_volta=linhas.id antes de GROUP BY está somando corretamento apenas os INTEIROS, ou seja, mensalidade=8, e zerando os meios. $sql_sum = "SELECT linhas.id, linhas.situacao, SUM(if(mensalidade=8,1,0)) as qt_inteiros, SUM(if(mensalidade=8, mensalidade,0)) as soma_inteiros, sum(if(mensalidade=4,1,0)) as qt_meios, SUM(if(mensalidade=4, mensalidade,0)) as soma_meios FROM passageiro, linhas WHERE(passageiro.situacao='AT' OR passageiro.situacao='CO') AND passageiro.linha_ida=linhas.id AND passageiro.linha_volta=linhas.id GROUP BY linhas.id"; RESULTADO: O que faz este 8,1,0 cria uma espécie de ponteiro que zera o resultado na query para próxima soma? Estou tentando vendo se consigo ajustar. Obrigado pela ajuda e se alguém tiver mais alguma solução agradeço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Agosto 1, 2014 Denunciar Share Postado Agosto 1, 2014 sum(if(mensalidade=4,1,0)) Lêia-se da seguinte forma: Conte 1 se mensalidade = 0; Se não for igual a 4, então não conte Como há uma comparação em if(mensalidade=4,1,0) deve-se usar o SUM e não o COUNT. O COUNT contaria todos. O SUM também SOMA todos mas devido o condicional IF, quando retorna verdadeiro soma 1 e quando retorna falso soma 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 devdenis Postado Agosto 1, 2014 Autor Denunciar Share Postado Agosto 1, 2014 poxa Denis consegui... você é o cara, me ajudou bastante seu exemplo.. agora tá somando os meios e os inteiros certinho.. eu apenas subtrai os resultados que eram = 'NT'. Está trazendo bastante resultado mais não estou conseguindo somar a qt_total, ou seja, mensalidade =8 + mensalidade=4 . (TOTAL RECEITA) parece estar somando apenas mensalidade=8. Estou tentando assim sem êxito: $sql_sum = " SELECT linhas.id, SUM(IF(passageiro.mensalidade=8,1,0) - (passageiro.linha_ida='NT' OR passageiro.linha_volta='NT')) AS qt_inteiros, SUM(IF(passageiro.mensalidade=8, passageiro.mensalidade,0)) AS soma_inteiros, SUM(IF(passageiro.mensalidade=4,1,0)) AS qt_meios, SUM(IF(passageiro.mensalidade=4, passageiro.mensalidade,0)) AS soma_meios, SUM(IF(passageiro.mensalidade=4,1,0) + (passageiro.linha_ida='NT' | passageiro.linha_volta='NT')) AS qt_nao_conv_meios, SUM(IF(passageiro.mensalidade=4,1,0) + (passageiro.linha_volta='NT')) AS qt_nao_conv_ida_meios, SUM(IF(passageiro.mensalidade=8,1,0) + (passageiro.linha_ida='NT' OR passageiro.linha_volta='NT')) AS qt_total_pagantes, SUM(IF(passageiro.mensalidade=8, passageiro.mensalidade,0) && passageiro.mensalidade=4, passageiro.mensalidade,0) ) AS qt_total FROM passageiro, linhas WHERE(passageiro.situacao='AT' OR passageiro.situacao='CO') AND passageiro.linha_ida=linhas.id GROUP BY linhas.id"; RESULTADO: sabe como posso somar essa qt_total? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Agosto 2, 2014 Denunciar Share Postado Agosto 2, 2014 Faça assim:SELECT linhas.id, SUM(IF(passageiro.mensalidade=8,1,0) - (passageiro.linha_ida='NT' OR passageiro.linha_volta='NT')) AS qt_inteiros, SUM(IF(passageiro.mensalidade=8, passageiro.mensalidade,0)) AS soma_inteiros, SUM(IF(passageiro.mensalidade=4,1,0)) AS qt_meios, SUM(IF(passageiro.mensalidade=4, passageiro.mensalidade,0)) AS soma_meios, SUM(IF(passageiro.mensalidade=4,1,0) + (passageiro.linha_ida='NT' | passageiro.linha_volta='NT')) AS qt_nao_conv_meios, SUM(IF(passageiro.mensalidade=4,1,0) + (passageiro.linha_volta='NT')) AS qt_nao_conv_ida_meios, SUM(IF(passageiro.mensalidade=8,1,0) + (passageiro.linha_ida='NT' OR passageiro.linha_volta='NT')) AS qt_total_pagantes, SUM(IF(passageiro.mensalidade=8, passageiro.mensalidade,0) && passageiro.mensalidade=4, passageiro.mensalidade,0) ) AS qt_total FROM passageiro, linhas WHERE(passageiro.situacao='AT' OR passageiro.situacao='CO') AND passageiro.linha_ida=linhas.id GROUP BY linhas.id UNION SELECT linhas.id, SUM(IF(passageiro.mensalidade=8,1,0) - (passageiro.linha_ida='NT' OR passageiro.linha_volta='NT')) AS qt_inteiros, SUM(IF(passageiro.mensalidade=8, passageiro.mensalidade,0)) AS soma_inteiros, SUM(IF(passageiro.mensalidade=4,1,0)) AS qt_meios, SUM(IF(passageiro.mensalidade=4, passageiro.mensalidade,0)) AS soma_meios, SUM(IF(passageiro.mensalidade=4,1,0) + (passageiro.linha_ida='NT' | passageiro.linha_volta='NT')) AS qt_nao_conv_meios, SUM(IF(passageiro.mensalidade=4,1,0) + (passageiro.linha_volta='NT')) AS qt_nao_conv_ida_meios, SUM(IF(passageiro.mensalidade=8,1,0) + (passageiro.linha_ida='NT' OR passageiro.linha_volta='NT')) AS qt_total_pagantes, SUM(IF(passageiro.mensalidade=8, passageiro.mensalidade,0) && passageiro.mensalidade=4, passageiro.mensalidade,0) ) AS qt_total FROM passageiro, linhas WHERE(passageiro.situacao='AT' OR passageiro.situacao='CO') AND passageiro.linha_ida=linhas.id Não testei a logica, mas é por este caminho. Teste o select após o UNION Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 devdenis Postado Agosto 10, 2014 Autor Denunciar Share Postado Agosto 10, 2014 Obrigado Denis... ainda vou testar testar isso que passou ! Está difícil esse somatório ...Peço que deixe o tópico ativo, quando sobrar tempo vou tentar denovo ! Grato ! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
devdenis
Boa Noite a todos.
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.