[firebase-br] RES: Erro Cálculo da média
UNIBRAS - PROGRAMAÇÃO
programacao em unibrasdistribuidora.com.br
Qui Ago 5 09:28:38 -03 2010
Presado,
Ao inves de usar um COUNT OU UM SUM de forma simples, caso esteja usando o
FIREBIRD 1.5 ou superior, para evitar possíveis problemas de cáuculos, você
pode usar coalesce(SUM (CAMPO), 0) para evitar problemas com campos "null"
Isto vale para quaisquer tipos de dados.
José Aparecido
Sócio Diretor
Softmaxi Tecnologia em Software.
Telefone: 31 3786-6178 e 3789 6178.
www.softmaxi.com.br
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Siro
Enviada em: quinta-feira, 5 de agosto de 2010 09:00
Para: Carlos H. Cantu; FireBase
Assunto: Re: [firebase-br] Erro Cálculo da média
Realmente, esta correto, da forma que vc fez, eu também testei aqui.
Mas veja a que estou fazendo:
SELECT count(i.valor_unitario),
AVG(I.VALOR_UNITARIO), sum(I.valor_unitario) FROM ITENS_SAIDAS I INNER JOIN
SAIDAS_PRODUTOS S ON (S.ID = I.ID_SAIDA) WHERE I.ID_PRODUTO = 10232 and
S.DATA_SAIDA >= '03/09/2010'
GROUP BY I.VALOR_UNITARIO
retorna:
COUNT AVG SUM
1 3,8 3,8
3 4,8 14,4
8 5 40
Isto esta correto.. Agora
o mesmo sql sem o agrupamento retorna:
SELECT count(i.valor_unitario),
AVG(I.VALOR_UNITARIO), sum(I.valor_unitario) FROM ITENS_SAIDAS I INNER JOIN
SAIDAS_PRODUTOS S ON (S.ID = I.ID_SAIDA) WHERE I.ID_PRODUTO = 10232 and
S.DATA_SAIDA >= '03/09/2010'
/***********************************/
--GROUP BY I.VALOR_UNITARIO
/***********************************/
retorna:
COUNT AVG SUM
12 4,85 58,2
Mostrando o valor minimo e máximo e retornou assim SELECT
count(i.valor_unitario), AVG(I.VALOR_UNITARIO), min(I.valor_unitario),
max(I.valor_unitario),
sum(I.valor_unitario)
FROM ITENS_SAIDAS I
INNER JOIN SAIDAS_PRODUTOS S ON (S.ID = I.ID_SAIDA) WHERE I.ID_PRODUTO =
10232 and S.DATA_SAIDA >= '03/09/2010'
COUNT AVG MIN MAX SUM
12 4,85 3,8 5 58,2
Em 05/08/2010 07:51, Carlos H. Cantu escreveu:
> Fiz um teste aqui, criei uma tabela com um campo numeric 9,2, inseri
> os 3 valores que vc usou e mandei calcular a AVG, e retornou 4.53
>
> Firebird 2.1.3
>
> []s
> Carlos H. Cantu
> www.FireBase.com.br - www.firebirdnews.org www.warmboot.com.br -
> blog.firebase.com.br
>
> AB> eu vou tratar de fazer essa prova assim que chegar ao escritorio
> AB> se detectar que é de facto um bug eu mesmo reporto o bug aos
> AB> developers
>
> AB> Andre
>
> AB> 2010/8/5 Siro<siro em protej.com.br>
>
>>> Olá André.
>>>
>>> Sim, já fiz teste com a versão 2.1 e ocorre o mesmo problema.
>>> Gostaria que mais alguém da lista também fizesse o teste para
>>> verificar, pois acho que já tentei de tudo para tentar descobrir se era
um provável
>>> erro meu, mas não consegui detectar.
>>>
>>> Caso seja realmente um bug, peço para alguém informar, pois não
>>> tenho "inglês"
>>> .
>>>
>>>
>>> Em 04/08/2010 22:39, André Barros escreveu:
>>>
>>> De facto o select que fizeste está correcto y deveria retornar a
>>> media
>>>> correcta pelo que deverá ser de facto algun bug no fire ja
>>>> experimentaste com a versão anterior do 2.1.3
>>>>
>>>> Andre Barros
>>>>
>>>> 2010/8/4 Siro<siro em protej.com.br>
>>>>
>>>> Bom dia.
>>>>> Pessoal, será que estou ficando lélé ou há um bug do Firebird no
>>>>> cálculo da média (AVG)?
>>>>>
>>>>> *Firebird 2.1.3.18185 , Delphi 2010, Ibexpert
>>>>>
>>>>> O sql abaixo me retorna os seguintes resultados:
>>>>>
>>>>> SELECT I.ID_PRODUTO, P.DESCRICAO_DETALHADA, I.VALOR_UNITARIO FROM
>>>>> ITENS_SAIDAS I INNER JOIN SAIDAS_PRODUTOS S
>>>>> ON (I.ID_SAIDA=S.ID) AND (I.ID_EMPRESA=S.ID_EMPRESA)
>>>>> INNER JOIN PRODUTOS P
>>>>> ON (I.ID_PRODUTO=P.ID) AND (I.ID_EMPRESA=P.ID_EMPRESA)
>>>>>
>>>>> WHERE S.ID_EMPRESA = 1
>>>>> AND S.STATUS = 'S'
>>>>> AND I.ID_PRODUTO = 10232
>>>>> and S.DATA_SAIDA>= '03/09/2010'
>>>>> GROUP BY I.ID_PRODUTO, P.DESCRICAO_DETALHADA, I.VALOR_UNITARIO
>>>>>
>>>>> /***************************************************/
>>>>> ID_PRODUTO DESCRICAO_DETALHADA VALOR_UNITARIO
>>>>> 10232 AVENTAL BAGUM AMARELO 5
>>>>> 10232 AVENTAL BAGUM AMARELO 4,8
>>>>> 10232 AVENTAL BAGUM AMARELO 3,8
>>>>>
>>>>>
>>>>>
>>>>> Quando quero a media utilizo o abaixo, que me retorna:
>>>>>
>>>>> SELECT I.ID_PRODUTO, P.DESCRICAO_DETALHADA,
>>>>> AVG(I.VALOR_UNITARIO)
>>>>>
>>>>> FROM ITENS_SAIDAS I
>>>>> INNER JOIN SAIDAS_PRODUTOS S
>>>>> ON (I.ID_SAIDA=S.ID) AND (I.ID_EMPRESA=S.ID_EMPRESA)
>>>>> INNER JOIN PRODUTOS P
>>>>> ON (I.ID_PRODUTO=P.ID) AND (I.ID_EMPRESA=P.ID_EMPRESA)
>>>>>
>>>>> WHERE S.ID_EMPRESA = 1
>>>>> AND S.STATUS = 'S'
>>>>> AND I.ID_PRODUTO = 10232
>>>>> and S.DATA_SAIDA>= '03/09/2010'
>>>>> GROUP BY I.ID_PRODUTO, P.DESCRICAO_DETALHADA
>>>>>
>>>>> /***************************************************/
>>>>> ID_PRODUTO DESCRICAO_DETALHADA AVG
>>>>> 10232 AVENTAL BAGUM AMARELO 4,85
>>>>>
>>>>> Como o fire chegou a esta media de 4.85?? isto não é um bug?
>>>>>
>>>>> Desde já agradeço
>>>>>
>>>>> ______________________________________________
>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em
>>>>> www.locador.com.br Para saber como gerenciar/excluir seu cadastro na
lista, use:
>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>>
>>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>>>
>>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
> AB> ______________________________________________
> AB> FireBase-BR (www.firebase.com.br) - Hospedado em
> AB> www.locador.com.br Para saber como gerenciar/excluir seu cadastro na
lista, use:
> AB> http://www.firebase.com.br/fb/artigo.php?id=1107
> AB> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista