Jump to content
Fórum Script Brasil
  • 0

[DUVIDA] Somar valores por mes


Julim
 Share

Question

Olá pessoal,

Tenho uma tabela de vendas, onde tenho uma coluna de data de cadastro (DATETIME) e uma coluna de preço (VARCHAR). A tabela tem os dados como abaixo:

DATA_CAD PREÇO

28/06/2012 3.000,00

30/06/2012 2.200,00

02/07/2012 1.000,00

03/07/2012 1.300,00

04/07/2012 1.200,00

O que eu preciso é agrupar os meses, neste caso junho e julho e apreentar o resultado de cada um. Usando o exemplo acima:

Junho = 5.500,00

Julho = 3.500,00

Eu fiz o SELECT de varias formas, mas nenhuma funcionou. Tentei usando o GROUP BY MONTH(data_cad), mas não retorna o resultado esperado. Alguém poderia me ajudar?

abs.

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Hum.. vou refazer o select dessa forma e testar. Posto os resultados.

Obrigado!

$res = mysql_query("SELECT valor_estimado, MONTH(data_cad) AS datacad FROM tb_projeto GROUP BY YEAR(data_cad), MONTH(data_cad)") or die (mysql_error());

while($valor = mysql_fetch_array($res)){

echo "<pre>";

print_r($valor);

echo "</pre>";

}

O resultado não foi o esperado, visto que não agrupou por mes...

Array

(

[0] => 3.000,00

[valor_estimado] => 3.000,00

[1] => 5

[datacad] => 5

)

Array

(

[0] => 1.000,00

[valor_estimado] => 1.000,00

[1] => 5

[datacad] => 5

)

Array

(

[0] => 2.000,00

[valor_estimado] => 2.000,00

[1] => 6

[datacad] => 6

)

Array

(

[0] => 4.000,00

[valor_estimado] => 4.000,00

[1] => 8

[datacad] => 8

)

Link to comment
Share on other sites

  • 0

Fiz um outro teste.

$sql = mysql_query("SELECT SUM(valor_estimado), MONTH(data_cad) FROM tb_projeto GROUP BY MONTH(data_cad)") or die ("Erro na função gravar_Valor >> ".mysql_error());

while ($row = mysql_fetch_array($sql)){

echo "<pre>";

print_r($row);

echo "</pre>";

}

Assim retorna correto o agrupamento, mas como o campo 'valor_estimado' armazena valores do tipo 3.300,00 o comando SUM não retorna o valor correto. Veja:

Array

(

[0] => 528.9

[sUM(valor_estimado)] => 528.9

[1] => 5

[MONTH(data_cad)] => 5

)

Array

(

[0] => 12.7

[sUM(valor_estimado)] => 12.7

[1] => 6

[MONTH(data_cad)] => 6

)

Array

(

[0] => 195

[sUM(valor_estimado)] => 195

[1] => 8

[MONTH(data_cad)] => 8

)

Tenho uma função para converter o valor para 3300 e somar, porém, não consegui inserir a mesma junto ao SELECT. Fiz assim:

$sql = mysql_query("SELECT SUM('".gravar_Valor(."'valor_estimado.'".)."'), MONTH(data_cad) FROM tb_projeto GROUP BY MONTH(data_cad)") or die ("Erro na função gravar_Valor >> ".mysql_error());

while ($row = mysql_fetch_array($sql)){

echo "<pre>";

print_r($row);

echo "</pre>";

}

Mas infelizmente da erro na consulta.

Link to comment
Share on other sites

  • 0

To quae chegando lá. Descobri uma forma de somar os valores, porém só funciona se eu usar um WHERE data_cad=determinado mes. Se usar o GROUP BY, pega apenas o primeiro registro de cada mes.

Mais alguém pode me dar uma orientação?

Preciso da somatória de todos os registros de cada mes.

Agradeço desde já

//desta forma, pega todos os registros do mes 8 e vai somando os valores. Fica certinho, mas preciso de todos os meses, ai uso o GROUP BY no outro exemplo

$sql = mysql_query("SELECT valor_estimado, MONTH(data_cad) FROM tb_projeto WHERE MONTH(data_cad)='8'") or die ("Erro >> ".mysql_error());

$total=0;

while ($row = mysql_fetch_array($sql)){

$valor = $row[valor_estimado];

$total+=$valor;

array_push($row, $total); //adiciono o valor na array

echo "<pre>";

print_r($row);

echo "</pre>";

}

//desta forma, agrupa os meses mas só pega o primeiro registro de cada mes.

$sql = mysql_query("SELECT valor_estimado, MONTH(data_cad) FROM tb_projeto GROUP BY MONTH(data_cad)") or die ("Erro >> ".mysql_error());

$total=0;

while ($row = mysql_fetch_array($sql)){

$valor = $row[valor_estimado];

$total+=$valor;

array_push($row, $total); //adiciono o valor na array

echo "<pre>";

print_r($row);

echo "</pre>";

}

Edited by Julim
Link to comment
Share on other sites

  • 0
Falta o SUM para somar tudo.

Então, se eu usar o SUM, tenho que tratar os valores do BD e transformar 3.000,00 em 3000.00. Eu tenho uma função para isso, mas não sei como usar direto na query. Tipo:

$sql = mysql_query("SELECT SUM(funcao_converte_decimal(valor_estimado)), MONTH(data_cad) FROM tb_projeto GROUP BY MONTH(data_cad)") or die ("Erro >> ".mysql_error());

Mas claro que assim não funciona. Se eu achasse uma forma de executar essa funcao_converte_decimal direto na query, resolveria o problema.

Outra maneira seria o que você sugeriu e mudar a forma que gravo no BD os valores, gravando já no formato decimal. Só que eu queria evitar isso, pois esse projeto é uma atualização, e terei que transportar dados do bd antigo para esse novo, e neste caso, vai dar incompatibilidade com os formatos de moeda.

Por isso eu usei um loop pegando os valores e somando a cada passagem, mas neste caso, só está pegando o primeiro registro de cada mês.

Pensei em usar um for, mas também não sei como fazer isso.

Link to comment
Share on other sites

  • 0

RESOLVIDO

Não consegui fazer a consulta transformando os valores gravados no bd no formato 11.111,11 para 11111.11, então mudei direto no banco e depois bastou usar o comando SUM. Não era o que eu queria, pois dessa forma terei que alterar muita coisa no projeto, mas tudo bem.

Obrigado pela ajuda!

$sql = mysql_query("SELECT SUM(valor_estimado), MONTH(data_cad) FROM tb_projeto WHERE YEAR(data_cad)=YEAR(NOW()) GROUP BY MONTH(data_cad)") or die ("Erro >> ".mysql_error());
while ($row = mysql_fetch_array($sql)){
    
    print_r($row);
    
}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.9k
    • Total Posts
      648.8k
×
×
  • Create New...