Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
>
1 hora atrás, Rapadura disse:
Oi
Talvez ajude :
Link
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?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
}
?>
>
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:
$valor_key = Array(); // ou [] PHP 7 while($row = mysqli_fetch_array($rs)){