Ir para conteúdo
Fórum Script Brasil
  • 0

[DUVIDA] Somar valores por mes


Julim

Pergunta

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 para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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>";

}

Editado por Julim
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...