Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Luiz

Order by Month e comparar porcentualmente cada mes

Recommended Posts

Olá pessoal,

 

Estou com uma pequena dúvida de como realizar a seguinte tarefa:

Em meu BD tenho a tabela VENDAS com diversas colunas, entre elas - as que interessam nesta minha dúvida - possuo valor e data.

 

Imprimir dados:

A impressao de dados consigo tranquilamente através de uma busca por faixa de datas através do WHERE data BETWEEN...

Na query aplico SUM() na coluna vendas e então agrupo a soma por mês através do GROUP BY MONTH(data)

E então aplico um _FETCH_ARRAY() para listar todos os resultados tendo uma saida assim:

Mês       || Valor
Janeiro   || $ 10.000
Fevereiro || $ 15.000
Março     || $ 20.000

 

A necessidade:
Tendo essa lista de valores agrupados por mês, eu preciso demonstrar a porcentagem de diferença de um mes para outro ficando desta forma:

Mês       || Valor     || Variação
Janeiro   || $ 10.000  || 0%
Fevereiro || $ 15.000  || 50%
Março     || $ 20.000  || 33,33%

 

Tendo em vista que essa sera uma busca com resultado "dinamico", uma vez que o usuario podera aplicar qualquer faixa de data, alguém consegue me fornecer um caminho/ideia de como posso realizar essa tarefa?

 

Vale ressaltar que fazer a conta eu sei rs ((mes_novo - mes_anterior)/mes_anterior)*100 - O que eu não sei é como aplicar isso na while de resultados

Moderadores:
Se for o caso, pode direcionar o topico para a área de PHP - já que minha programação é em PHP - caso não seja uma dúvida pertinente a somente MySQL

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
28 minutos atrás, Guilherme Luiz disse:

Mês       || Valor || Variação Janeiro   || $ 10.000 || 0% Fevereiro || $ 15.000 || 50% Março     || $ 20.000 || 33,33%

 

Você vai fazer o seguinte, definir o termo anterior em um key, e no loop seguinte, você vai diminuir a key atual, e pegar a key anterior, ai só fazer a conta.

Assim:

<?php
$a = 1;
$valor_key = Array(); // ou [] PHP 7
while($row = mysqli_fetch_array($rs)){
	$data = $row['data'];
	$valor = $row['valor'];
  	//Definindi uma key para os valores
	$valor_key[$a] = $valor;
  	//Definindo que b deverá pegar a key anterior ao loop atual
	$b = $a - 1; 
  	//Definindo valor para key anterior
	$valor_ant = $valor_key[$b];
  	//((mes_novo - mes_anterior)/mes_anterior)*100
  	$porcentagem = ((($valor - $valor_ant)/$valor_ant)*100);
	$a++;
}

 

Não testei pra ver se está funcionando mas acredito que sim, pelo menos serve de base.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Rapadura disse:

Oi

 

Talvez ajude :
Link

 

:star: 

 

Não... não ajudou rs mas vlw a inteção de repassar a info!

 

1 hora atrás, AnthraxisBR disse:

 

Você vai fazer o seguinte, definir o termo anterior em um key, e no loop seguinte, você vai diminuir a key atual, e pegar a key anterior, ai só fazer a conta.

Assim:


<?php
$a = 1;
$valor_key = Array(); // ou [] PHP 7
while($row = mysqli_fetch_array($rs)){
	$data = $row['data'];
	$valor = $row['valor'];
  	//Definindi uma key para os valores
	$valor_key[$a] = $valor;
  	//Definindo que b deverá pegar a key anterior ao loop atual
	$b = $a - 1; 
  	//Definindo valor para key anterior
	$valor_ant = $valor_key[$b];
  	//((mes_novo - mes_anterior)/mes_anterior)*100
  	$porcentagem = ((($valor - $valor_ant)/$valor_ant)*100);
	$a++;
}

 

Não testei pra ver se está funcionando mas acredito que sim, pelo menos serve de base.

 


Saquei a ideia!
Pensei em fazer assim especificando e subtraindo keys...

Vou testar na parte da tarde e posto o resultado.

 

ALguem mais com alguma outra sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue como ficou

 

<?php

    $queryFinanceiro	= "SELECT
	sum(valor_total) AS valor_total,
	MONTH(data) AS mes,
	YEAR(data) AS ano
	FROM venda
	WHERE data BETWEEN '".$inicial." 00:00:00' AND '".$final." 23:59:59' 
	GROUP BY EXTRACT(YEAR_MONTH FROM data) ORDER BY EXTRACT(YEAR_MONTH FROM data) ASC";
	$sqlFinanceiro		= mysqli_query($connect_sql,$queryFinanceiro);

    $a = 1;
    $valor_key = array();
    
        while($financeiro = mysqli_fetch_array($sqlFinanceiro)){
            
            $valor = $financeiro['valor_total'];
            $valor_key[$a] = $valor;
            $b = $a - 1;
            $valor_ant = $valor_key[(($b <= 0) ? '1' : $b)]; // adicionei essa verificação para não puxar indice inexistente
            $calculo = ((($valor - $valor_ant)/$valor_ant)*100);
            $porcentagem = (($calculo == 0) ? "---" : $calculo); // adicionei essa verificação para imprimir o calculo
        }
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Lenon John
      Detalhe importante:
      Se eu digito MINHA_CHAVE_JADLOG incorreta, ai eu recebo um retorno informado que as credenciais estão incorretas.
      Se eu digito MINHA_CHAVE_JADLOG corretamente, não recebo nenhum retorno.

      $dados = [
        'frete' => [
          'cepori' => '29010070',
          'cepdes' => '29300040',
          'frap' => '',
          'peso' => 2,
          'cnpj' => '00000000000100',
          'conta' => '000001',
          'contrato' => '',
          'modalidade' => 4,
          'tpentrega' => 'D',
          'tpseguro' => 'N',
          'vldeclarado' => 100,
          'vlcoleta' => ''
        ]
      ];
      $postfields = http_build_query($dados);
       
      $header = array();
      $header[] = 'Authorization: Bearer MINHA_CHAVE_JADLOG';
      $header[] = 'Content-Type: application/json';
      $header[] = 'description:';
       
      $curl = curl_init('https://www.jadlog.com.br/embarcador/api/frete/valor/');
      curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
       
      $exec = curl_exec($curl);
      $jadlog = json_decode($exec);
       
      curl_close($curl);
       
      print_r($jadlog);
    • Por DuRodrig
      Pessoal, bom dia! 
      Estou fazendo uma página com um cálculo simples de porcentagem.
      Existe um formuário que coloco o valor da venda, a comissão é fixa em 13% e a tarifa é um valor que você coloca também.
      Exemplo: (valor da venda) R$ 100,00 - (comissão 13%) - (tarifa) R$ 8,50 = (resultado) R$ 78,50, só que está gerando o resultado de R$ 79,00.
      Como faço para corrgir esse problema?
      Segue o código:

       
      $(function(){ $('#valorVenda').on('input', function() { calculate(); }); $('#tarifa').on('input', function() { calculate(); }); function calculate(){ var pPos = parseFloat($('#valorVenda').val()); var tar = parseFloat($('#tarifa').val()); var result = " "; if(isNaN(pPos) || isNaN(tar)){ }else{ result = ((pPos - ((13.00 * pPos) / 100.00)) - tar).toFixed(2); } $('#total').val(result); } });  
      Desde já agradeço.
    • Por biakelly
      Oi, vim do fórum de PHP,  eu havia postado uma dúvida lá, mas acredito e por recomendação que minha dúvida seja melhor aplicada aqui.
       
      Bem, estou fazendo uma página que precisa ter a cotação do Bitcoin.
      Nesta pagina preciso de 2 inputs um que traga o preço do bitcoin e outro que traga o preço em real.
      Ex: 1 Bitcoin custa R$ xxx,00 reais (valor padrão)
       
      Mas ao digitar R$100,00 no campo real ele precisa trazer o preço equivalente a quantidade de Bitcoins que vale R$100,00
      O mesmo para o Bitcoin, se eu digitar uma fração ele precisaria trazer o valor em Reais.
       
      Encontrei um site que faz isso (https://dolarhoje.com/bitcoin-hoje/), mas queria algo para minha página parecido
       
       
      Bem, até consigo pegar o valor com este código simples em PHP:
       
      <?php $url = 'https://www.mercadobitcoin.net/api/btc/ticker'; $result = file_get_contents($url); $result = json_decode($result, true); ?>  
      Será que em Javascript é possível fazer isso? Desculpem, entendo quase zero de Javascript
      Vocês conseguem me ajudar?
    • Por janir.matheus
      Boa tarde, peço ajuda dos membros desse fórum pois confesso estar completamente perdido.
      Tomando como base o diagrama (em anexo), preciso de uma query que retorne as empresas, seus produtos e as categorias de cada produto, sendo que cada produto pode pertencer a uma ou mais categorias.
       
      select tbl_produtos.Empresa, tbl_empresas.Nome, tbl_catprod.Categoria, tbl_classproduto.Classe, tbl_produtos.Id, tbl_produtos.Produto from tbl_produtos inner join tbl_empresas on tbl_produtos.Empresa = tbl_empresas.Id left join tbl_catprod on tbl_produtos.Id = tbl_catprod.Categoria left join tbl_classproduto on tbl_catprod.Categoria = tbl_classproduto.Id; Tentei a consulta mostrada acima mas o resultado não foi o que eu esperava.
      Agradeço antecipadamente pela ajuda.

    • Por iguulima
      Bom dia a todos, tenho em meu banco de dados uma tabela de pedidos, onde nesse pedidos estão salvos as id's dos produtos que foram selecionados pelo usuário, gostaria de saber se tem alguma forma utilizando um while que possa selecionar os produtos mais pedidos dessa tabela, não tenho ideia por onde começar. Consigo listar todos apenas mas não sei como selecionar os que são mais pedidos.
×

Informação importante

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